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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
IMPLEMENT_TEMPLATE_DYNCREATE (class T_GEFrameWnd, CGraphicEditorFrame<T_GEFrameWnd>, T_GEFrameWnd)
j'ai les erreurs suivantes que je ne comprend définitivement pas.
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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