Utiliser des templates avec la macro DECLARE_DYNCREATE
Bonjour,
J'utilise un template avec une classe neccessitant obligatoirement un DECLARE_DYNACREATE
J'ai suivi les conseils de Frascape et modifiant le contenu de la macro DECLARE_DYNCREATE mais rien n'y fait. J'ai toujours des erreurs
Voici le code de la nouvelle macro :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #define IMPLEMENT_TEMPLATE_RUNTIMECLASS(TemplArg, class_name, base_class_name, wSchema, pfnNew) \
template <TemplArg> \
AFX_COMDAT const AFX_DATADEF CRuntimeClass class_name::class##class_name = { \
#class_name, sizeof(class class_name), wSchema, pfnNew, \
RUNTIME_CLASS(base_class_name), NULL }; \
template <TemplArg> \
CRuntimeClass* class_name::GetRuntimeClass() const \
{ return RUNTIME_CLASS(class_name); } \
#define IMPLEMENT_TEMPLATE_DYNCREATE(TemplArg, class_name, base_class_name) \
template <TemplArg> \
CObject* PASCAL class_name::CreateObject() \
{ return new class_name; } \
IMPLEMENT_TEMPLATE_RUNTIMECLASS(TemplArg, class_name, base_class_name, 0xFFFF, \
class_name::CreateObject) |
Mais en l'utilisant comme ceci
Code:
IMPLEMENT_TEMPLATE_DYNCREATE (class T_GEFrameWnd, CGraphicEditorFrame<T_GEFrameWnd>, T_GEFrameWnd)
j'ai les erreurs suivantes que je ne comprend définitivement pas.
Citation:
error C2143: syntax error : missing ';' before '<'
error C2059: syntax error : ';'
error C2143: syntax error : missing ';' before '<'
Je me suis même amusé à reprendre le code de macro pour les remettre dans mon code à moi. Et pareil mais je ne comprend pas le problème, dont voici le code après la conversion manuelle des instructions du preprocesseur.
Code:
1 2 3 4 5 6 7 8 9 10 11
| template <class T_GEFrameWnd>
CRuntimeClass* CGraphicEditorFrame<T_GEFrameWnd>::GetRuntimeClass() const { return RUNTIME_CLASS(CGraphicEditorFrame<T_GEFrameWnd>); }
template <class T_GEFrameWnd>
AFX_COMDAT const AFX_DATADEF
CRuntimeClass CGraphicEditorFrame<T_GEFrameWnd>::classCGraphicEditorFrame<T_GEFrameWnd> =
{
"CGraphicEditorFrame<T_GEFrameWnd>",
sizeof(class CGraphicEditorFrame<T_GEFrameWnd>),
wSchema, pfnNew, RUNTIME_CLASS(T_GEFrameWnd), NULL
}; |
Donc si quelq'un avait une piste j'ai tout épuisé.
Merci d'avance