如何让我的类在不显式引用参数的情况下推断参数的内部类型?请看下面的最小示例:
#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
时失败是空的……如何引用嵌套的内部类型?
最佳答案
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);
关于c++ - 从嵌套的 STL 模板推断类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8437009/