2011-01-14 18 views
25

Gibt es so etwas wie Java-Anmerkungen in C++?Java-ähnliche Anmerkungen in C++

Zum Beispiel markiert die @Override-Annotation eine Funktion, die eine andere Funktion überschreibt, und wenn dies nicht der Fall wäre, würde dies bei der Kompilierung einen Fehler verursachen.

Ich bin auf der Suche nach so etwas in C++.

Antwort

8

C++0x haben diese Funktion, wo Sie explizit angeben können, ob eine Memberfunktion die Funktion einer Basisklasse überschreiben soll, eine vom Compiler generierte Standardimplementierung verwenden und vieles mehr.

+2

Jetzt, da C++ 11 veröffentlicht wurde, gibt es Dokumentation, die diese Funktion beschreibt? –

+1

Und auf welches Feature beziehen Sie sich konkret? –

+0

Klicken Sie einfach oben auf den C++ 0x-Link, es führt Sie genau zu diesem Abschnitt in der Wikipedia-Dokumentation. – Ruben

1

Es gibt C++ 0x, das die Überschreibung 'Annotation' hat. Oder, wenn Sie mehr von der Java „Schnittstelle“ like-Code erreichen wollte, dass Fehler, wenn Sie keine Methoden implementieren, können Sie eine abstrakte Klasse verwenden:

class Base { 
public: 
    virtual void foo() = 0; 
}; 

class Extended : public Base { 
public: 

    void foo2() { 
     cout << "hi" << endl; 
}; 

int main() { 
    Extended e; 
    e.foo(); 
} 

Dies wird, wenn Sie in einem Compiler-Fehler führen Überschreiben Sie foo in der Basisklasse nicht. Das Problem ist jedoch, dass die Basisklasse keine eigene Implementierung haben kann.

0

Es gibt nichts in der Sprache dafür. Das Beste, auf das Sie hoffen können, ist eine Compiler-spezifische Option. Ich würde anfangen, die Dokumentation für "Pragma" für Ihren Compiler zu überprüfen.

16

C++ 11 bietet Unterstützung für "generalized attributes", die als Obermenge von Java-Annotationen angesehen werden können, da sie nur auf Variablen/Funktionen, aber auch auf Anweisungen angewendet werden können. Aber C++ 11 definiert nur die Syntax für verallgemeinerte Attribute, nicht jedoch für den Benutzer, um sie zu definieren.

Dieser Artikel gibt eine gute Übersicht über generali Attribute: http://www.codesynthesis.com/~boris/blog/2012/04/18/cxx11-generalized-attributes/

GCC diese Funktion unterstützt ab Version 4.8, nach http://gcc.gnu.org/projects/cxx0x.html

Um die Unterstützung für benutzerdefinierte Attribute zu implementieren, sind Compiler Plugins vielversprechend, vor allem basierend auf High-Level-Sprachintegration, wie https://fedorahosted.org/gcc-python-plugin/

+0

das ist die nächste Sache zu einer Anmerkung, die ich bis jetzt gesehen habe! Danke für diese hilfreiche Antwort – bquenin