Warum wird C++11 keine Unterstützung für die Deklaration extern "C" auf eine statische member-Funktion?

Zur Verfügung gestellt, dass ich eine C-Bibliothek, die eine Funktion deklariert als void g(void (*callback)()); Der folgende code ist eine elegante und dennoch rechtswidrig ist:

struct A
{
    //error C2159: more than one storage class specified (VC++ Nov 2012 CTP)
    static extern "C" void callback()
    {}
};

g(A::callback); 

Warum C++11 nicht unterstützen diese?

  • Haben Sie versucht, ohne die extern "C"?
  • Wenn ohne extern "C", der name der Funktion wird entstellt und die Verbindung schlägt fehl.
  • was link-Fehler? es kompiliert auf gcc4.7.2
  • Sind Sie sicher, dass die Verknüpfung wird scheitern?
  • Wenn g erwartet eine extern "C" void (*)(), dann g(&A::callback) ist illegal, und erfordert einen compiler Diagnose. Viele Compiler nicht, dies durchzusetzen, allerdings (und sind dadurch gebrochen in dieser Hinsicht).
  • Fehler C2159: mehr als ein Speicher-Klasse angegeben (VC++ Nov 2012 CTP)
  • Aber die C-Funktion aufrufen nicht den Rückruf mit Namen, es sieht nur einen Zeiger. So ist der name mangling ist ein nicht-Problem. Versuchen Sie bitte, bevor Sie Fragen.
  • Name mangling ist nicht das Problem. Aufrufkonventionen sind. Name mangling ist Teil der Aufruf-Konventionen, aber es ist nicht alle von Ihnen. Ich habe tatsächlich verwendet einen compiler, wo C und C++ verwendet unterschiedliche Aufrufkonventionen (Aufrufer bereinigt den stack in C, angerufene in C++).
  • nicht zu sein scheinen eine gute Passform für eine Frage ALSO, die Antwort kann nur erahnt werden.
  • Nein, wir haben mehrere Mitglieder des Ausschusses SO und wir haben alle die vor-und postmailings von den Ausschusssitzungen öffentlich verfügbar. folglich gibt es keine Notwendigkeit zu erraten.
  • Für den Datensatz, G++ ignoriert Sprache Verknüpfung von Funktions-Typen, aber das ist ein bug. Clang++ auch ignoriert, vermutlich für G++ - Kompatibilität.
  • sollte nur Fragen, praktische, vertreten hat, die Fragen auf der Grundlage der tatsächlichen Probleme, denen Sie begegnen. Gesprächige, offene Fragen vermindern die Nutzbarkeit unserer Website und schieben andere Fragen aus der front Seite"

InformationsquelleAutor xmllmx | 2013-01-18
Schreibe einen Kommentar