Der obige Code gibt mir den folgenden Fehler in Visual C ++ 2010:
%Vor% Wie Sie das Problem mit __stdcall
Modifikator sehen können. Ist das der Compilerfehler?
Nein, das ist Absicht. Die Aufrufkonvention ist ein wichtiger Bestandteil der Funktionsdeklaration. Ihre Vorlagenfunktion verwendet die Standard-Aufrufkonvention. Was nicht __stdcall ist, außer du kompilierst mit / Gz. Der Standardwert ist / Gd, __cdecl.
Der Code wird kompiliert, wenn Sie x64 anvisieren, weil er glücklicherweise nur eine Aufrufkonvention hat.
Fix:
%Vor% Dies liegt daran, dass (*) eine Standard-Aufrufkonvention bedeutet, nämlich __cdecl
.
ist eigentlich gleich
%Vor%, die natürlich nicht mit R(__stdcall *)(T0, T1)
in Win32 übereinstimmen, wobei __stdcall
nicht ignoriert wird. Wenn Sie sich für Funktionszeiger teilweise spezialisieren möchten, benötigen Sie eine partielle Spezifikation für jede Aufrufkonvention, die Sie akzeptieren möchten.
Sie haben Ihre Vorlage für den Fall "stdcall" nicht spezialisiert, d. h. Sie brauchen
%Vor%Nicht sicher über die Syntax, ungetestet, aber das sollte das Problem sein.
Tags und Links c++ stdcall templates template-specialization