Это то, для чего было изобретено 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
делают.