- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
Engine::GetSingleton()->SetCallbacks(
new myname::Method<void(void),Application>(&Application::Render, boost::weak_ptr<Application>(application)),
new myname::Method<void(void),Application>(&Application::Update, boost::weak_ptr<Application>(application)),
0,
0,
new myname::Method<void(void),Application>(&Application::Init, boost::weak_ptr<Application>(application)),
new myname::Method<void(void),Application>(&Application::Cleanup, boost::weak_ptr<Application>(application))
);
а шаблончики в принципе нормальные, только не понятно зачем они...
а еще для того чтоб включить хидер с синглтоном, нужно включить все хидеры от которых он зависит, хотя в большинстве случаев человеку нужна какая нибудь захудалая функция, которая принимает инт и возвращает инт и сама по себе не имеет зависимостей...
сейчас пытаюсь заменить синглтоны на неймспейсы или структуры со статическими методами (оно немного удобнее), а все данные описывать в С++ файле, скрывая их от внешних глаз... получается лучше, но как-то не очень удобно, а у новичков от вида этого вообще батхерт случается, но избавление от лишних зависимостей и ускорение компиляции этого стоят...
Прикольно, только порядок инициализации статических членов не определён. Собираем приложение без ошибок и получаем вылет ещё до входа в main. Или непредсказуемое поведение.
Скорость компиляции - это конечно проблема, но это проблема видна ещё больше, если использовать шаблоны, так что в случае синглтонов это не проблема.
class FunctorBase
{
public:
virtual operator() = 0;
};
template <typename T>
class FunctorTyped : public FunctorBase
{
T f_;
public:
Functor(const T& f): f_(f) {}
virtual operator() { f_(); }
};
template <typename T>
inline FunctorTyped<T> functor(const T& f)
{
return FunctorTyped<T>(f);
}
...
Engine::GetSingleton()->SetCallbacks(
functor(boost::bind(&Application::Render , application)),
functor(boost::bind(&Application::Update , application)),
0,
0,
functor(boost::bind(&Application::Init, application)),
functor(boost::bind(&Application::Cleanu p, application))
);