1>e:\project\orwell\head\multimapwizard\trunk\externals.cpp(49): error C2079: 't2' uses undefined class 'Externals::TFunction<F>' 1> with 1> [ 1> F=Externals::my_function_f2 1> ]
3 Réponses :
Ceci est parce que (*) signifie une convention d'appel par défaut, qui est est en réalité égale à p> qui, bien sûr, ne correspondra pas à un __ CDECL code>.
r (__ stdcall *) (t0, t1) code> sur win32 où
__ stdcall code> n'est pas ignoré. Si vous souhaitez spécialiser partiellement pour les pointeurs de fonction, vous aurez besoin d'une spécification partielle pour chaque convention d'appel que vous souhaitez accepter. P> p>
Non, c'est par conception. La convention appelante fait partie intégrante de la déclaration de fonction, la fonction de votre modèle utilise la convention d'appel par défaut. Ce qui n'est pas __stdCall à moins que vous ne compilez avec / gz. La valeur par défaut est / gd, __cdecl.
Le code compile lorsque vous cible x64 car il n'a que blisser une seule convention d'appel. P>
correction: p>
Vous n'avez pas spécialisé votre modèle pour l'affaire STDCALL, c'est-à-dire que vous avez besoin
template<class R, class T0, class T1> class TFunction<R(__stdcall *)(T0,T1)> { typedef R (*func_type)(T0,T1); };
__STDCAl : "Sur la famille des processeurs Itanium (IPF) et X64 processeurs, __STDCAll est accepté et ignoré par le compilateur ", que je suppose que c'est pourquoi cela fonctionne 64 bits.
Stackoverflow.com/Questtions/4534907/stdCall-Typef-g-Proble M pourrait aider
@sehe n'est-il pas déjà en train d'utiliser cette syntaxe?