2016-04-03 13 views
0

のみ、特定の名前空間で使用され、それを実現する方法はありますか?現在の名前空間をアサートする方法はありますか?私はマクロを主張したい私は、マクロ</p> <pre><code>#define DEFINE_VAL(x) int x </code></pre> <p>があると例えば

#define DEFINE_VAL(x) static_assert(CurrentNamespaceIsXYZ); int x 

それとも

#define DEFINE_VAL(x) ASSERT_CURRENT_NAMESPACE_IS(XYZ); int x 

がどのようにCurrentNamespaceIsXYZまたはASSERT_CURRENT_NAMESPACE_ISを定義/実装する:他の言葉で

、私が何かのようにしたいですか?

+0

短い答えは:いいえ。前処理フェーズは、一般に、名前空間などの言語構造が実際に解析されるコンパイル段階の前に発生します。おそらくあなたは[実際のXY問題は何ですか?](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)について説明することができますか? –

+0

あなたは、それが望ましくないところまで、エントリー時に#undefineすることができます。それは多くの仕事になる可能性があります。マクロは使用しないでください。 –

+0

私は質問を改訂しました。もう一度見てもらえますか?ありがとうございました! –

答えて

0

修飾されていない型が修飾型と同じ型であるかどうかを確認するだけです。名前の衝突を提供するために、TESTにGUIDを接尾辞にも

#DEFINE_VAL(x)     \ 
    struct TEST;     \ 
    static_assert(std::is_same<TEST, ::CurrentNamespaceIsXYZ::TEST>::value, \ 
       "Not in XYZ); \ 
    int x 

おそらく最高。

関連する問題

 関連する問題