在现代C++中是否可以将字符串文字作为参数传递给C++模板?

Bil*_*ore 50 c++ c++17 c++20

是否可以在"现代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() {

}
Run Code Online (Sandbox Code Playgroud)

Yak*_*ont 54

是的,在.

问题是确定模板非类型参数的唯一性很困难.

增加了<=>太空船运营商的比较.如果它是非用户提供的(并且仅<=>依次关闭非用户提供,递归重复)(以及一些其他要求;请参阅p0732),该类型可以用作非类型模板参数.

这种类型的可从原始被构造"strings"constexpr构造函数,使用包括扣导向件,使它们自动大小本身.

由于存储的数据大小可能是类型的一部分,因此您需要将类型作为auto类型化的非类型参数或其他自动推导类型.


请注意,将模板的实现放在cpp文件中通常是个坏主意.但这是另一个问题.

  • 我非常高兴"<=>`被广泛称为"宇宙飞船运营商". (16认同)
  • @chris你已经过时了,它被CWG批准,全体会议投票通过:) (2认同)