在“现代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() {
}
答案 0 :(得分:54)
是,在c++20中。
问题在于确定模板非类型参数的唯一性很困难。
c++20添加了<=>
太空飞船操作员比较。如果它是非用户提供的(并且仅基于非用户提供的<=>
,则递归重复)(和few other requirements; see p0732),则该类型可以用作非类型模板参数。
可以从"strings"
构造函数中的原始constexpr
构造此类类型,包括使用c++17推导指南使它们自己自动调整大小。
由于存储的数据大小可能是该类型的一部分,因此您需要将该类型作为auto
typed non-type parameter或自动推断的类型。
请注意,将模板的实现放在cpp文件中通常是一个坏主意。但这是另一个问题。
答案 1 :(得分:0)