gpt4 book ai didi

c++ - 为什么可变参数模板的模板特化与非可变模板的特化不同?

转载 作者:太空宇宙 更新时间:2023-11-04 15:18:34 26 4
gpt4 key购买 nike

我不明白为什么可变参数模板的模板特化与常规(即非可变参数)模板不同。例如,我有一个模板和一个特化,例如:

enum class MF : int {
ZERO = 0,
ONE = 1,
TWO = 2
};

// --------- Specialization -------------
template <MF mf>
class Stat{
public:
Stat(std::string msg) {
cout << "Generic Stat construtor: " << msg << endl;
}
};

// --------- Template Specialization -------------
template<>
class Stat<MF::ONE>{
public:
Stat(std::string msg) {
cout << "Specialized Stat constructor: " << msg << endl;
}
};

我专门研究了 MF 枚举的特定值。

现在,如果我想特化可变参数模板,我无法使用 MF 枚举的特定值来特化可变参数模板参数(例如,MF::ONE ),我只能专注于一种类型,(例如 MF)。

// --------- Variadic Template -------------
template<MF mf, typename... E>
class Var{
public:
Var(std::string msg){
cout << "Generic Var constructor: " << msg << endl;
}

};

// --------- Variadic Template Specialization -------------
template<>
class Var<MF::TWO, MF>{
public:
Var(std::string msg){
cout << "Specialized Var constructor: " << msg << endl;
}
};

我想为特定的 MF 值专门化我的可变参数模板,但我似乎做不到。

是否有我缺少的语言的某些方面可以让我做我想做的事?类似的东西:

template<>
class Var<MF::TWO, MF::ONE>{
public:
Var(std::string msg){
cout << "Specialized Var constructor: " << msg << endl;
}
};

可以找到完整的例子here

最佳答案

如果我没理解错的话,您希望您的可变参数模板使用任意数量的 MF 值进行参数化。好吧,不要这样声明:

template<MF mf, typename... E>

...声明了任意数量的类型参数,但是像这样:

template<MF mf, MF... moreMF>

...声明任意数量的 MF 类型的非类型参数。

也就是说,显式特化对于可变参数模板没有什么不同,但你不知何故忘记了如何在两者之间设置参数。

关于c++ - 为什么可变参数模板的模板特化与非可变模板的特化不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25365891/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com