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);