我有一个这样定义的函数:
template <size_t SIZE>
double MyFun(std::function<double(std::array<double,SIZE>&)> f,std::array<double,SIZE> &x,SIZE> &y){
instructions;
}
和另一个函数,应该是前一个的参数,其定义如下:
double MyFun2(std::array<double,3> &var){
instructions;
}
如果我尝试这样称呼“ MyFun”:
double something;
std::array<double,3> var = {...};
std::array<double,3> var2 = {...};
something = MyFun(MyFun2,var,var2);
我收到此错误:
error: no matching function for call to ‘MyFun(double (&)(std::array<double,3>&),3>&,3>&)’
note: template argument deduction/substitution failed:
note: mismatched types ‘std::function<double(std::array<double,SIZE>&)>’ and ‘double (*)(std::array<double,3>&)’
此外,如果我尝试将“ MyFun2”存储在带有“自动”的变量中
auto function = MyFun2;
“功能”的类型为:
double (*function)(std::array<double,3UL> &var)
,我也不能将“ function”用作MyFun的参数。 我发现的唯一解决方案是通过指定正确的类型来对“ MyFun2”进行某种类型的投射:
double something;
std::array<double,3> var = {...};
std::array<double,3> var2 = {...};
std::function<double(std::array<double,3>&)> function = MyFun2;
something = MyFun(function,var2);
通过这种方式,将“功能”作为“ MyFun”的第一个参数传递。 但是,为什么我会有这样的歧义,而不能仅通过输入MyFun2作为第一个参数来调用MyFun?为什么汽车不能弄清楚“正确”的类型?
谢谢:)