例如假设我有一个宏
#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?
答案 0 :(得分:1)
不确定。只需检查非限定类型是否与限定类型相同。
#DEFINE_VAL(x) \
struct TEST; \
static_assert(std::is_same<TEST, ::CurrentNamespaceIsXYZ::TEST>::value, \
"Not in XYZ); \
int x
可能最好将GUID后缀为TEST
,以提供名称冲突。