【发布时间】:2019-12-01 10:03:32
【问题描述】:
我有一个这样定义的函数:
template <size_t SIZE>
double MyFun(std::function<double(std::array<double,SIZE>&)> f, std::array<double,SIZE> &x, std::array<double,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>&), std::array<double, 3>&, std::array<double, 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”的变量中
auto function = MyFun2;
赋予“函数”的类型是:
double (*function)(std::array<double, 3UL> &var)
我也不能使用“函数”作为 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, var, var2);
这样,将“function”作为“MyFun”的第一个参数传递就可以了。 但是为什么我有这样的歧义,我不能只通过输入 MyFun2 作为第一个参数来调用 MyFun?为什么 auto 不能找出“正确”的类型?
谢谢你:)
【问题讨论】:
标签: c++ templates types auto std-function