2015-12-08 9 views
5

Aşağıdaki davranışı taklit etmemi sağlayan makro oluşturmaya çalışıyorum ancak bu çalışmaz. Yorum karakterlerini makroya eklemek mümkün mü? Başka bir seçenek nedir?Önişlemci makrosu kullanarak yorum karakterleri ekleme

#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

Bazı derleyiciler (en az bir?) Desteği #define COMMENT/##/'yorum yapıyor, ancak aradığınız şeyin olup olmadığını bilmiyorum. Yine de standart değil, bu yüzden ilk tercih çözüm değil. –

+0

Çoğu makro içerik, insanlar tarafından * çağrıldığında * görülmez, bu nedenle yorumlar gerçekten yararlı değildir. Genelde, derleyici Preprocessor'u kullanarak * yeni kod * oluşturur ve bu kod derleyici tarafından işlenir. Bazı derleyiciler, Önişleme aşamasından sonra kaynak kodunu yazdırma seçeneklerine sahiptir. –

cevap

2

Ben İstediğin sözdizimi ile mümkün olduğunu sanmıyorum, ama bu biraz farklı biri ile başarmak mümkün - kullanarak parantez.

Bu çözüm, C + 11'den beri kullanılabilen variadic makroları kullanır, ancak bazı derleyiciler bunu daha önce desteklemiştir.

#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; 
);