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