有没有办法断言当前的命名空间?

时间:2016-04-03 02:18:13

标签: c++ namespaces macros

例如假设我有一个宏

#define DEFINE_VAL(x) int x

我想断言宏只用在某个命名空间中,有没有办法实现呢?

换句话说,我想要的是:

#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?

1 个答案:

答案 0 :(得分:1)

不确定。只需检查非限定类型是否与限定类型相同。

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

可能最好将GUID后缀为TEST,以提供名称冲突。