c++ - 从嵌套的 STL 模板推断类型

标签 c++ templates stl

如何让我的类在不显式引用参数的情况下推断参数的内部类型?请看下面的最小示例:

#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/

相关文章:

c++ - setMouseCallback 将坐标传递给主函数

c++ - boost::asio::async_read 在不满足完成条件的情况下结束

c++ - 嵌套类构造函数调用私有(private)构造函数,它可以工作吗?

c++ - 打印任何 STL 容器

c++ - 类头之外的模板运算符重载实现

c++ - 在 C++ 中打印 std::unordered_multimap 中特定键的多个值

C++ : recognizing lower case as correct when its stored as upper case?

python - 在 web.py 中呈现 HTML

c++ - 在模板运算符 [] 中删除 "const int"限定符

c++ - 如何在类中使用 unique 函数?