如何在不明确引用参数的情况下让我的类推断参数的内部类型?请看下面的最小例子:
#include <vector>
template <class T>
class foo {
public:
foo(std::vector<T> &x) :
_x(x) {
T dummy = x.front(); // Trying to trick the compiler here
}
private:
std::vector<T> _x;
};
int main() {
std::vector<int> a;
foo<int> b(a); // This works
foo c(a); // This fails
return 0;
}
我看到foo
期望它的参数是vector<int>
,但它让我创建了一个T==[int]
类型的对象,所以看起来它知道内部类型是什么!当dummy
为空时,不要忘记a
的赋值失败...如何引用嵌套的内部类型?
答案 0 :(得分:3)
foo c(a); // This fails
原因很明显。 foo
是一个类模板,如果不指定模板参数,则无法实例化其对象
这与函数模板不同,模板参数可以通过函数参数推断出来。在这种情况下,foo
命名一个类型(或应该),而不是构造函数。
在C ++ 11中,您可以这样做:
template<class T>
foo<T> make_foo(std::vector<T> const& x){
return foo<T>(x);
}
// in main
auto f = make_foo(a);