这是C ++初学者的问题:在使用可变参数模板时,我发现:
template <class... Ts> struct tuple {};
template <class T, class... Ts>
struct tuple<T, Ts...> : tuple<Ts...>
{
tuple(T t, Ts... ts) : tuple<Ts...>(ts...), tail(t) {}
T tail;
};
我只是想了解这里发生的事情:我们可以通过实例化这样的元组
tuple<int, double, const char*, const char*, const char*> myTuple(1234, 33.444, "I", "like", "C++");
但不包含:
tuple myTuple2(1234, 33.444, "I", "like", "C++");
为什么编译器不能从给定类型的列表中自动推断类型?
如果我这样做
template <class T>
void swap(T& first, T& second) {
T aux = first;
first = second;
second = aux;
}
...
...
swap<int>(a, b);
swap(a, b);
两个变体都是可能的。可变参数模板参数不可能吗? C ++用于推断类型的规则是什么?
tuple myTuple2(1234, 33.444, "I", "like", "C++");
是通过调用构造函数进行变量声明和初始化,而