【发布时间】:2019-06-24 19:53:53
【问题描述】:
我有一个头文件,其中的代码看起来像这样:
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 not working if the function is declared inside class scope)。
c++ 在标题末尾是否有类似“未声明”的函数(可能是一些宏技巧)?还是我错过了任何其他选择?如果没有更好的方法存在,我可能会使用额外的(可能是过多的)命名空间,但想问问是否有其他想法。
【问题讨论】:
-
标题中真的需要
GenTag吗?静态类成员需要在 cpp 文件中的类之外进行初始化,因此您只需在 cpp 文件中定义GenTag,使其不存在于头文件中。 -
嗨内森。 constexpr 并非如此,因为它们仅内联定义(所以是的,我需要在标题中使用它)。我在这里需要 constexpr 而不是 const 因为它在 switch-case 语句中使用。可能需要将其添加到问题中
-
真的有什么问题吗?那些多重定义并不是问题。
-
嗨,讲故事的人。我关心它,因为可能有其他函数接受具有相同名称 GenTag 的 const char 数组,该函数具有多个类的特定版本
标签: c++ header-files constexpr