例如,假设我有一个宏

#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,以提供名称冲突。

10-08 08:45
查看更多