Ist es möglich, einen Zeiger-zu-Extern- "C" -Funktionstyp innerhalb einer Vorlage zu definieren?

9

Ich möchte eine öffentliche typedef zu einer Vorlage für einen Zeiger auf ein Funktion nehmen ein Argument hinzufügen, die "C" Sprache Verknüpfung verwendet.

Ich habe es versucht:

%Vor%

Und:

%Vor%

Und:

%Vor%

ohne Erfolg.

Ist das, was ich erreichen will, möglich?

    
Daniel Trebbien 01.02.2011, 18:25
quelle

3 Antworten

10

C ++ 03, §7.5p4:

  

Eine Verknüpfungsspezifikation soll nur im Namensraumbereich auftreten. ... Eine C-Sprachverknüpfung wird für die Namen von Klassenmembern und den Memberfunktionstyp von Klassenmemberfunktionen ignoriert.

Leider können Sie dies im aktuellen C ++ einfach nicht tun. Dieser Text ist in dem letzten C ++ 0x-Entwurf unverändert, aber "Template typedefs" kann es möglicherweise ausführen.

    
Fred Nurk 01.02.2011, 18:34
quelle
1

Betrachte typedef eines boost::function oder die STL-Funktionsobjekte ... auch kannst du keine Vorlage innerhalb eines externen "C" -Blocks aus irgendwelchen offensichtlichen Gründen definieren, wenn du darüber nachdenkst.

    
AJG85 01.02.2011 18:39
quelle
0

Alles scheint für mich gut zu funktionieren, wenn ich einfach% %_de% von Ihrem Typdef weglasse. Das heißt, das folgende Kompilieren, Verknüpfen und Ausführen ohne Warnungen, Fehler oder Probleme:

foo.c:

%Vor%

test.cpp:

%Vor%

Für die C ++ - Gurus: Ich kenne nicht die Feinheiten, was C-Verknüpfung von C ++ unterscheidet. Gibt es irgendwelche versteckten Probleme, die in einem einfachen Beispiel wie diesem nicht auftauchen würden?

    
Karmastan 01.02.2011 18:44
quelle

Tags und Links