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

C++ 将多个嵌套模板化类传递给模板化函数,c++,templates,C++,Templates,我已经做了几个小时了,但似乎找不到解决这个问题的方法。在你提问之前,这不是一个家庭作业问题 因此,我有两个定制的模板类,分别称为Matrix和Vector,我有一个名为train(…)的函数,它接受一个名为std::Vector&的X和一个名为生成器的std::Vector&以及一些其他模板参数。该功能描述如下: template <typename Mat, typename Vec> void train (vector<Mat*>& Generators,

我已经做了几个小时了,但似乎找不到解决这个问题的方法。在你提问之前,这不是一个家庭作业问题

因此,我有两个定制的模板类,分别称为
Matrix
Vector
,我有一个名为
train(…)
的函数,它接受一个名为
std::Vector&
X
和一个名为
生成器的
std::Vector&
以及一些其他模板参数。该功能描述如下:

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);
}
这里的问题是,当我试图编译它时,我得到以下错误:

error: no instance of function template "make_move" matches the argument list
            argument types are: (int, int, std::unordered_map<int, std::tuple<int, Matrix<unsigned int> *>, std::hash<int>, std::equal_to<int>, std::allocator<std::pair<const int, std::tuple<int, Matrix<unsigned int> *>>>>, std::vector<Matrix<unsigned int> *, std::allocator<Matrix<unsigned int> *>>, int, int)
错误:没有函数模板“make_move”的实例与参数列表匹配
参数类型有:(int,int,std::无序映射,std::vector,int,int)
这是我第一次将多个嵌套模板类传递给模板函数,因此我不知道要在google中搜索的关键字组合是否正确,这就是为什么我无法在这方面取得进展的原因,如果您能提供任何帮助,我将不胜感激

谢谢

In

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);
但可能有一个输入错误:

  • vector
    应该改为
    Vec
  • make_move
    是否应该有
    Vec
    模板参数

您应该将std::添加到无序_映射和元组中,非?我在开始时使用了std::无序_映射;使用std::vector;使用std::tuple;您好,我很抱歉,我确实输入了一个错误,但我已经更改了make_move代码,我相信这反映了我的实际目标。现在的问题是,
Args…
应该是相同的
Tree&Tree,X&
,这不是您的情况。
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);
make_move<Mat, Vec>(1, 1280, tree_, Generators, n, q);