Здравствуйте, just_bear, Вы писали:
_>Здравствуйте, Аноним, Вы писали:
_>Можно сэмулировать статический конструктор (конструктор класса) из С#. Например, так (примите как набросок):
_>
_>#define STATIC_CTOR(x) static Initiator<x> m_initiator;
_>template<class Initable>
_>class Initiator
_>{
_>public:
_> Initiator(){Initable::init();}
_>};
_>class A
_>{
_> STATIC_CTOR(A);
_> static void init(){.../*здесь инициализация*/}
_>...
_>};
_>
Можно и без лишних статиков обойтись, с ними всегда проблема:
template<typename T>
struct StaticConstructor
{
template<typename T>
struct StaticConstructorInner
{
StaticConstructorInner()
{
T::init();
}
~StaticConstructorInner()
{
T::release();
}
};
StaticConstructor()
{
static StaticConstructorInner<T> ctor;
}
};
class A : public StaticConstructor<A>
{
public:
void init(){}
void release(){}
};
И потом стоит подумать заводить ли статик для лога, может стоит это зацентрализовать в каком то синглтоне глобальном, с кучей других сервисов, упрозающих лог, наверняка логи пригодятся не только в классе PlanetTranay.