Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 类模板和多个参数包的模板参数推断_C++_Templates_Variadic Templates_C++17 - Fatal编程技术网

C++ 类模板和多个参数包的模板参数推断

C++ 类模板和多个参数包的模板参数推断,c++,templates,variadic-templates,c++17,C++,Templates,Variadic Templates,C++17,在C++17中,类模板的模板参数或多或少会被推导出来,就像现在函数模板的情况一样。 是相关的文件 作为上述论文的一个例子: template<class ... Ts> struct X { X(Ts...) }; X x1{1}; // OK X<int> X x11; // OK X<> 模板结构X{X(Ts..)}; xx1{1};//OK X X x11;//OK X 函数模板还有另一个有趣的功能,即当发生演绎时。 考虑下面的代码: templat

在C++17中,类模板的模板参数或多或少会被推导出来,就像现在函数模板的情况一样。
是相关的文件

作为上述论文的一个例子:

template<class ... Ts> struct X { X(Ts...) };
X x1{1}; // OK X<int>
X x11; // OK X<>
模板结构X{X(Ts..)};
xx1{1};//OK X
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);
模板
自动函数(T&&…{}
// ...
//U是int,char-T是int,double
func(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};
模板
结构{
S(T&&…{}
};
// ...
//U是int,char-T是int,double
S{0,0};
本文包含以下示例:

template<class ... Ts> struct X { X(Ts...) };
X<int> x3{1, 'a', "bc"}; // OK X<int,char,const char*>
模板结构X{X(Ts..)};
xx3{1',a',bc};//OK X
无论如何,这不完全是同一件事,我不确定它是否会被允许。

这:

template<typename... U, typename... T>
struct S { ... };
模板
结构S{…};
只是根据[temp.param]格式不正确:

如果主类模板、主变量模板或别名模板的模板参数是模板参数包,则应为最后一个模板参数

本案:

template<class ... Ts> struct X { X(Ts...) };
X<int> x3{1, 'a', "bc"}; // OK X<int,char,const char*>
模板结构X{X(Ts..)};
xx3{1',a',bc};//OK X
存在问题,因为
X
已经是有效类型。本文的这一部分已在Oulu中删除,尽管将来可能会有一些建议,表明应推导某些类模板参数,但应指定其他参数:

X<string, ???> x3{"a", 1, "b"}; // X<string, int, const char*>.
xx3{“a”,1,“b”};//十,。
其中,
是一系列表明意图的标记

所以答案是-不,这是不允许的,对吗?