2015-12-08 12 views
5

以下の動作をシミュレートできるマクロを作成しようとしていますが、これは機能しません。マクロでコメント文字を挿入することはできますか?もう一つの選択肢は何ですか?プリプロセッサマクロを使用してコメント文字を挿入します。

#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

いくつかのコンパイラ(少なくとも1つ)は、コメントを書く '#define COMMENT/## /'をサポートしていますが、それがあなたが探しているものかどうかわかりません。とにかく非標準的なので、それは最初の選択肢ではありません。 –

+0

*呼び出されたときに人間の目にはほとんどのマクロコンテンツが見えないので、コメントは本当に有用ではありません。一般に、コンパイラはプリプロセッサを使用して新しいコード*を生成し、そのコードはコンパイラによって処理されます。一部のコンパイラには、プリプロセス段階の後にソースコードを印刷するオプションがあります。 –

答えて

2

私はそれはあなたが望む構文で可能だとは思わないが、それは少し異なるとなんとかだ - 使用して、かっこ。

このソリューションでは、C + 11以降で使用可能な可変マクロを使用していますが、一部のコンパイラではその前によくサポートされています。

#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; 
); 
関連する問題