|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Feb 2006
Messaggi: 1304
|
[C++]Inizializzazione di membri statici in classi template
Salve,
non so perchè ma mi trovo sempre in queste situazioni tali da odiare C++ La situazione è questa: ho una classe Class ereditata da n ClassType<T> che sono classi template. Ora, dentro ogni ClassType<T> è definito un puntatore statico, che viene inizializzato a NULL nel suo .cpp: Codice:
template<class T>
class ClassType : public Class
{
...
protected:
static ClassInfo* classInfo;
}
//CPP
template<class T>
Class::ClassInfo* ClassType<T>::classInfo = NULL;
Ho provato a spostare la definizione nell'header: non dà più errore quando si tenta di creare la classe, ma da errore ogni volta che si tenta di usare classInfo. Qualcuno sa dirmi dove sbaglio (apparte che nel cercare di fare queste cose ovviamente)? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Mar 2009
Città: Bologna
Messaggi: 1174
|
Immagino ti manchi lo specificatore di "tipo" su ClassInfo... (e Class ?) ... se sono anche loro classi template.
template<class T> ClassInfo<T> *ClassType<T>::classInfo = NULL; Anche se occorrerebbe conoscere come Class e ClassInfo siano state definite. Ultima modifica di BrutPitt : 30-04-2009 alle 17:35. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Feb 2006
Messaggi: 1304
|
Vabbè risolto
Per qualche motivo, il problema risiedeva nell'allocare ClassType<C> c() sullo stack. Usando invece new e delete funge alla perfezione... Cmq ora cio un'ottima riflessività in C++, del tipo: Codice:
class A : BaseObject {}
class B : A {}
class C : B {}
class Z : B {}
void dosomething( A* a )
{
if( a->extends<C>() )
doC();
else if( a->extends<Z>() )
doZ();
else
B* b = a->as<B>();
}
Ultima modifica di Tommo : 30-04-2009 alle 22:18. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:54.



















