2015-12-08 19 views
5

Ich versuche ein Makro zu erstellen, mit dem ich das Verhalten unten simulieren kann, aber das funktioniert nicht. Ist es möglich, Kommentarzeichen per Makro einzufügen? Was ist eine andere Option?Kommentarzeichen mithilfe des Präprozessormakros einfügen

#define model_interface(CLASS, ROOT) \ 
    class CLASS : public NInterface<ROOT> { \ 
    private: \ 
    CLASS(CLASS&) { } \ 
    // 'two slashes should be actually inserted too so another characters on same row are ignored' 


model_interface(Element, ElementRoot) { // 'previous bracket should be ignored' 

// members declarations here 

} 
+0

Einige Compiler (mindestens eine?) Unterstützen '#define COMMENT/## /' einen Kommentar, aber ich weiß nicht, ob das ist, was Sie suchen. Es ist sowieso nicht Standard, also ist es keine Lösung erster Wahl. –

+0

Die meisten Makro-Inhalte werden von Menschen nicht gesehen, wenn * aufgerufen *, so dass Kommentare nicht wirklich nützlich sind. Im Allgemeinen verwendet der Compiler den Präprozessor, um * neuen Code * zu erzeugen, und dieser Code wird dann vom Compiler verarbeitet. Einige Compiler verfügen über Optionen zum Drucken des Quellcodes nach der Vorverarbeitungsphase. –

Antwort

2

Ich glaube nicht, es mit der Syntax, die Sie möglich ist, wollen, aber es ist machbar mit leicht verschiedenen ein - mit Klammern.

Diese Lösung verwendet Variadic-Makros, die seit C + 11 verfügbar sind, aber einige Compiler unterstützten es schon lange davor.

#define model_interface(CLASS, ROOT, ...) \ 
    class CLASS : public NInterface<ROOT> { \ 
    private: \ 
    CLASS(CLASS&) { } \ 
    __VA_ARGS__ \ 
    } 

model_interface(Element, ElementRoot, 
    // members declarations here 
    // the variadic part takes care of a comma, e.g.: std::array<int, 3> a; 
); 
Verwandte Themen