我有一个模板类,试图在类定义之外定义成员函数,如下所示:

class traits {
  typedef std::vector<int> container_t;
  ...other typedefs//

};

template <class traits>
class Foo {
  typedef typename traits::container_t  container_t
  // where container_t = std::vector <int>

  // member function to be templatized over container type
  void Initialize (container_t&);

private:
  container_t  temp;   //temp is of type std::vector<int>

};


template <typename T>
void Foo <traits>::Initialize (T& data)
{
   fill the data
}


我希望函数Initialize采取模板容器类型-container_t,其中container_t可以是std :: vector或std :: set等。

但我得到编译器错误为

“初始化(T&)的原型与Foo类中的任何不匹配”
“候选者正在初始化(container_t&)” ...

最佳答案

这样可以解决您的问题吗?

template <class traits>
void Foo<traits>::Initialize( typename traits::container_t& t ) {
  // code
}

10-06 01:21