У меня есть файл заголовка с кодом, который выглядит просто так:
constexpr uint32 GenTag(const char tag[5]) { ... }
class SomeClass
{
static constexpr uint32 TAG1 = GenTag("smth");
static constexpr uint32 TAG2 = GenTag("abcd");
};
//constexpr needed for switch-case statement
Проблема в том, что функция GenTag()
относится к глобальной области видимости, и я хотел бы избежать ее, если это возможно.
Я хотел объявить это внутри класса, но это невозможно с constexpr
(объяснение здесь: constexpr не работает, если функция объявлена внутри области действия класса ).
Имеет ли c ++что-нибудь вроде «undeclare» функции в конце заголовка (может быть, некоторые трюки с макросами)?Или какие-то другие варианты я пропустил?Если бы не было лучшего способа, я бы, вероятно, выбрал бы дополнительное (может быть, чрезмерное) пространство имен, но хотел бы спросить, есть ли другие идеи.