在C++17中,类模板的模板参数将会像函数模板一样被推导。
这里是相关文件。
以下是来自上述文件的示例:
只要推导有助于区分,我们可以有两个参数包。不需要将它们包装在元组或其他结构中。
那么类模板能否做到同样的效果呢?
以一个示例为例:
这里是相关文件。
以下是来自上述文件的示例:
template<class ... Ts> struct X { X(Ts...) };
X x1{1}; // OK X<int>
X x11; // OK X<>
当模板函数进行类型推断时,函数模板具有另一个有趣的特性。
考虑以下代码:
template<typename... U, typename... T>
auto func(T&&...) {}
// ...
// U is int, char - T is int, double
func<int, char>(0, .0);
只要推导有助于区分,我们可以有两个参数包。不需要将它们包装在元组或其他结构中。
那么类模板能否做到同样的效果呢?
以一个示例为例:
template<typename... U, typename... T>
struct S {
S(T&&...) {}
};
// ...
// U is int, char - T is int, double
S<int, char> s{0, .0};
这篇论文包含以下示例:
template<class ... Ts> struct X { X(Ts...) };
X<int> x3{1, 'a', "bc"}; // OK X<int,char,const char*>
无论如何,这并不完全是同一件事情,我不确定是否允许。