首页 > 解决方案 > 如何测试宏是否在全局/命名空间范围内使用?

问题描述

我想写一个标题,让我用类似于以下的语法声明首选项:

declpref("some.pref.name", "description");

哪个注册some.pref.name了给定的描述和一些全局注册表,所以我可以轻松地反省我的代码声明的偏好,从各种来源设置它们的值等。

在主要魔法之前,我可能会通过某种静态构造来做到这一点:

#define declpref(name, desc)                       \
    {                                              \
        static struct __pref {                     \
            __pref() {                             \
                register_preference(name, desc);   \
            }                                      \
        } __static_pref;                           \
    }

问题是如果在本地范围内使用上面的代码将无法按我想要的方式工作:

void some_function() {
    declpref("some.pref", "description"); // won't register until some_function called
} 

我认为我可以强制在全局/命名空间范围内完成首选项声明,因为无论如何它们都应该是全局唯一的名称。

我如何检查它被声明的范围并抛出错误?

标签: c++c++11

解决方案


推荐阅读