Я хотел бы написать заголовок, который позволит мне объявить предпочтения с синтаксисом, похожим на:
declpref("some.pref.name", "description");
, который регистрирует some.pref.name
с данным описанием в некотором глобальном реестре так что я могу легко проанализировать, какие настройки объявил мой код, установить их значения из разных источников и т. д. c.
Я бы, вероятно, сделал это с помощью какой-либо конструкции stati c перед основными волхвами c:
#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
}
Я думаю, что я ' m Хорошо с принудительным выполнением предпочтения объявлений в глобальной области / пространстве имен, так как в любом случае они должны быть глобально уникальными именами.
Как проверить область, в которой она была объявлена, и выдать ошибку?