我有大量的函数定义为:

template<typename T>
void myFunction1(vector<T>& vin);


关键是,我输入了STL向量并做了一些工作。

我最近需要将默认分配器更改为客户分配器。除非我将定义更改为:否则这似乎破坏了每个功能。

template<typename T, typename Alloc>
void myFunction1(vector<T,Alloc>& vin);


更复杂的是,我不会在所有情况下都使用重载的分配器。

这是否意味着我必须用两个定义重写每个函数,一个定义使用分配器的模板,另一个定义不使用分配器?我真的希望这不是答案...

最佳答案

拥有一个尊重完整类模板的单一功能模板就足够了。假设地,这可以做到:

template <typename T, typename Alloc>
void myFunction1(std::vector<T, Alloc> & v);


每个向量都有这两个参数,无论分配器之一是否默认。

但是,实际上,更富有成果的习惯用法是使整个容器成为模板:

template <typename V>
void myFunction1(V & v)
{
    typedef typename V::value_type value_type;
    // ...
}

关于c++ - 具有STL vector 的模板函数被新分配器破坏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13400717/

10-13 03:46