是否可以在"现代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
是的,在c ++ 20中.
问题是确定模板非类型参数的唯一性很困难.
c ++ 20增加了<=>太空船运营商的比较.如果它是非用户提供的(并且仅<=>依次关闭非用户提供,递归重复)(以及一些其他要求;请参阅p0732),该类型可以用作非类型模板参数.
这种类型的可从原始被构造"strings"在constexpr构造函数,使用包括C++ 17扣导向件,使它们自动大小本身.
由于存储的数据大小可能是类型的一部分,因此您需要将类型作为auto类型化的非类型参数或其他自动推导类型.
请注意,将模板的实现放在cpp文件中通常是个坏主意.但这是另一个问题.
| 归档时间: |
|
| 查看次数: |
3468 次 |
| 最近记录: |