Здравствуйте, никак не могу решить проблему в следующем коде (макет), не вызывается конструктор класса A, кажется что статический объект класса B просто не воплощается... подскажите как лучше всего решить эту проблему?
struct A {
A() {
MessageBox(NULL, "A", "A", MB_OK);
}
};
template <class T> struct B {
B() {}
static A a;
};
template<class T> A B<T>::a;
struct C : public B<C> {
C(){}
};
afkos,
> Здравствуйте, никак не могу решить проблему в следующем коде (макет), не вызывается конструктор класса A, кажется что статический объект класса B просто не воплощается... подскажите как лучше всего решить эту проблему?
> > struct A {
> A() {
> MessageBox(NULL, "A", "A", MB_OK);
> }
> };
>
> template <class T> struct B {
> B() {}
> static A a;
> };
> template<class T> A B<T>::a;
>
> struct C : public B<C> {
> C(){}
> };
>
B<C>::a, как и любая другая статическая переменная шаблона, не будет инстанцирован до тех пор, пока к нему не будет обращения или пока не будет явного запроса на инстанцирование. Соответственно, нужно сделать или то, или другое. Например:
struct A {
A() {
MessageBox(NULL, "A", "A", MB_OK);
}
};
template <class T> struct B {
B() { (void)&B<T>::a; }
static A a;
};
template<class T> A B<T>::a;
struct C : public B<C> {
C(){}
};
Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен