是否可以在“现代 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() {
}
最佳答案
是的,在 c++20 .
问题在于很难确定模板非类型参数的唯一性。
c++20添加 <=>
飞船运算符(operator)比较。如果它是非用户提供的(并且仅基于非用户提供的 <=>
依次递归地重复)(和 few other requirements; see p0732 ),则该类型可以用作非类型模板参数。
此类类型可以从原始 "strings"
构造在 constexpr
构造函数,包括使用 c++17扣除指南,使它们自动调整大小。
由于存储数据的大小可能会成为类型的一部分,因此您需要将类型设为 auto
typed non-type parameter。或其他自动推断的类型。
请注意,将模板的实现放在 cpp 文件中通常是个坏主意。但这是另一个问题。
关于c++ - 在现代 C++ 中是否可以将字符串文字作为参数传递给 C++ 模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51195445/