0

这可能是一个微不足道的问题,但让我发疯。我想定义一个foo()可以与不同容器一起使用的函数,例如 :vector<int>、和.vector<double>set<int>set<double>

我试图这样定义 foo :

template<typename CONT, typename T>
   int foo(CONT<T>){
      //evaluate x
      return (int) x ;
   }

这种定义不起作用,但我不明白为什么。

我怎样才能实现类似的目标?

4

2 回答 2

6

指定容器类模板及其实例化的方法是使用模板模板参数:

template <template <typename...> class Cont, typename T>
int foo(Cont<T>) {
    ...
}

Note that Cont is using a variable number of arguments because otherwise it wouldn't cover the unknown number of defaulted template arguments the standard containers have.

于 2012-10-18T23:11:45.323 回答
5

考虑一下:

template< class ContainerT >
int foo( ContainerT const& c ) {
}

然后ContainerT可以是任何事物,包括std::vector<int>std::vector<std::string>甚至std::map<std::string, int>。所以你不需要添加一个新的模板参数,如果你需要知道类型只是使用value_type你的容器:

typedef typename ContainerT::value_type container_type; // Or T in your foo
于 2012-10-18T23:10:59.140 回答