C ++:如何模拟集合?

时间:2018-02-02 15:05:30

标签: c++ templates

假设我有一个双端队列和一个向量:

deque<someclass> d;
vector<similar_class> v;

现在,我有两个不同的容器和两个不同但相似的元素类。

我有一个函数执行对以下任何类型都有用的操作:

deque<similar_class> a;
deque<someclass> b;
vector<similar_class> c;
vector<someclass> d;

如何编码&#39; collection_type&#39;在模板中?

例如:

// starting with this function (which is fine)
template<class element>
element * my_func(deque<element> & collection)
{ ... }


// Now, how do I abstract this for a generic collection?
template<class collection, class element> 
element * my_func(collection<element> & c)
{ ... }

???

1 个答案:

答案 0 :(得分:7)

template<class collection, class element> 
element* my_func(collection<element> & c)

应该是:

template <template <typename ...> class collection, class element> 
element* my_func(collection<element>& c)

您还有其他可能的选择:

template <class C> 
typename C::pointer // or also auto or decltype(auto)
my_func(C& c)