Vorlage teilweise Spezialisierung für __stdcall Funktionszeiger

8
%Vor%

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?

    
pure cuteness 13.05.2011, 12:00
quelle

3 Antworten

10

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%     
Hans Passant 13.05.2011, 12:16
quelle
4

Dies liegt daran, dass (*) eine Standard-Aufrufkonvention bedeutet, nämlich __cdecl .

%Vor%

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.

    
Puppy 13.05.2011 12:16
quelle
1

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.

    
Simon Richter 13.05.2011 12:16
quelle