将多个嵌套的模板化类传递给模板化函数

时间:2018-11-30 07:41:37

标签: c++ templates

我已经在这里待了几个小时,但似乎无法找到解决方法。在您问之前,这不是一个作业问题。

因此,在这里,我有两个名为Matrix<T>Vector<T>的自定义模板类,并且我有一个名为train(...)的函数,它接受了一个名为{{1 }}和称为std::vector<VectorT<T>*>&的{​​{1}}以及其他一些模板化的参数。此功能如下所述:

X

其中std::vector<Matrix<T>*>&Generators,而template <typename Mat, typename Vec> void train (vector<Mat*>& Generators, const vector<Vec*>& X, Vec* root_node, // This is assuming that the root node is in X int n, int q) { // Create a schreier tree out of the generating set and the input set tuple<std::unordered_map<int, tuple<int, Mat*>>, size_t> tree_info_ = FiniteField::ComputeSchreierTree(Generators, X, root_node, n, q); std::unordered_map<int, tuple<int, Mat*>> tree_ = std::get<0>(tree_info_); make_move(1, 1280, tree_, Generators, n, q); } Mat。上面的函数接受这些参数,并生成一个名为Matrix<T>的{​​{1}},其中key是Vec,值是Vector<T>的{​​{1}}和{{1} }。

现在我要在此执行的操作是将此std::unordered_map<_key, _Tp, _Hash, _Pred, _Alloc>tree_传递给另一个名为int的函数,该函数定义如下:

std::tuple<_Elements ...>

这里的问题是当我尝试对其进行编译时,出现以下错误:

int

这是我第一次将多个嵌套的模板化类传递给模板化函数的经验,因此我不知道要在google中搜索的正确关键字组合,这就是为什么我至今无法做到这一点的原因的帮助将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:0)

template <typename Mat, typename Vec>
void make_move(int i, int j,
               unordered_map<int, tuple<int, Mat*>>& tree_,
               vector<Mat*>& Generators, int n, int q);

Vec无法推论(参数中未列出),因此您必须在调用时指定它:

make_move<Mat, Vec>(1, 1280, tree_, Generators, n, q);

但是可能有错字:

  • 应该vector<Mat*>Vec吗?
  • make_move是否应有Vec模板参数?