2
我有一些包含数据的文件和一个可以识别文件数据类型的函数peekType()
。各种功能取决于数据类型。要考虑的文件数量不应该是硬编码的。模板:递归直到推导出适当的参数
我想我会传递一个文件名列表到一个函数,并递归地从参数包中弹出这些文件名,直到定义匹配一些基本情况,此时基本情况会接管。像这样:
//Base case
template<class tA, class tB>
int PerformAlgorithm(std::vector<tA> a, std::vector<tB>){
//Do stuff
}
//Recursive part
template<typename... Arguments >
int PerformAlgorithm(std::string inputfile, Arguments ... args){
switch(peekType(inputfile)){
case TYPE_BYTE: {
std::vector<uint8_t> arr;
return PerformAlgorithm(args..., arr);
}
case TYPE_FLOAT: {
std::vector<double> arr;
return PerformAlgorithm(args..., arr);
}
default:
std::cerr<<"Unrecognised type!"<<std::endl;
return -1;
}
}
PerformAlgorithm("fileA", "fileB");
不幸的是,上述从未达到的基本情况,产生的问题,如:
cannot convert ‘args#0’ (type ‘std::vector<double>’) to type ‘std::__cxx11::string {aka std::__cxx11::basic_string<char>}’
我要去哪里错了?
我基于模板元编程因子示例做出的替代尝试也失败了。
我已经复制了一个类似的场景,它的工作原理。 –
[类似情景](https://ideone.com/pfz9Yg)。它可能是有用的 –
谢谢,@BiagioFesta:我会研究:这是一个很好的MWE! (除PRNG被滥用的方式之外。) – Richard