【发布时间】:2018-12-14 04:19:37
【问题描述】:
是否可以在“现代 C++”(C++17 或更高版本)中将字符串文字作为参数传递给 C++ 模板?
我意识到你可以使用构造函数参数来做到这一点;我只是认为将它作为模板参数会更方便,而不是深埋在 cpp 文件中。我很好奇这是否是现代 C++ 的一个新特性。请参阅下面的伪代码,了解我正在尝试做的事情:
伪代码示例:
// Header File /////////////////////////
template<constexpr string Name>
class ModuleBase {
public:
ModuleBase();
string name;
};
class xyz : ModuleBase<"xyz"> {
public:
xyz();
};
// Cpp File //////////////////////////
template<string_literal Name>
ModuleBase<Name>::ModuleBase() {
name = Name;
}
xyz::xyz() : ModuleBase() {
}
【问题讨论】:
-
FWIW,您不能将模板类的定义放在 cpp 文件中:stackoverflow.com/questions/495021/…
-
@NathanOliver 你可以,但有很长的警告
-
是的,我知道,但是让 OP 阅读实际解释然后尝试在评论中总结所有内容要容易得多..
-
@BillMoore 问题不在于语法,问题在于语义——模板定义(不仅仅是声明!)需要在使用端可见——所以无论如何,您基本上都必须像标题一样使用它(或者仅在本地使用它)。