如何为此制作模板功能?

时间:2012-01-26 21:31:30

标签: c++ templates

我有两个非常相似的函数,我想从中创建一个模板函数。

void func1(vector<vector<vector<struct1_type> > > &struct1_x, const int &x,
const int &y, struct2_type &struct2_y, list1<struct1_type> &l1)

void func2(vector<vector<vector<struct1_type> > > &struct1_x, const int &x,
const int &y, struct2_type &struct2_y, list2<struct1_type> &l2)

这些函数做同样的事情......唯一不同的是最后一个参数,它是两个不同的类,用于处理列表。

我尝试了很多没有结果和错误的东西。感谢您提供相关新手的任何帮助!

2 个答案:

答案 0 :(得分:2)

这就是为template template发明的。

template <template <typename> class list_type> 
void func1(vector<vector<vector<struct1_type> > > &struct1_x,
           const int &x,
           const int &y,
           struct2_type &struct2_y,
           list_type<struct1_type> &q1);

但请注意,模板必须与完全匹配。例如,您不能将std::list用于list_type参数,因为它不需要一个模板参数 - 它需要两个:包含的类型和分配器类型。

使用直截了当的非template template解决方案可能更简单。

template <typename list_type> 
void func1(vector<vector<vector<struct1_type> > > &struct1_x,
           const int &x,
           const int &y,
           struct2_type &struct2_y,
           list_type &q1);

并期望用户指定list1<struct1_type>作为模板参数。这是std::stackstd::queuestd::priority_queue所做的。

答案 1 :(得分:0)

这是你如何声明一个概括你的两个函数声明的函数模板:

template <typename L>
void func1(vector<vector<vector<struct1_type> > > &struct1_x, const int &x, const int &y, struct2_type &struct2_y, L &q1)

这是你的意思吗?