我有两个非常相似的函数,我想从中创建一个模板函数。
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)
这些函数做同样的事情......唯一不同的是最后一个参数,它是两个不同的类,用于处理列表。
我尝试了很多没有结果和错误的东西。感谢您提供相关新手的任何帮助!
答案 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::stack
,std::queue
和std::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)
这是你的意思吗?