为什么在该示例中不自动推断模板参数?

问题描述 投票:1回答:1

这是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 ++用于推断类型的规则是什么?

c++ templates variadic-templates
1个回答
6
投票
tuple myTuple2(1234, 33.444, "I", "like", "C++");

是通过调用构造函数进行变量声明和初始化,而

© www.soinside.com 2019 - 2024. All rights reserved.