我使用通用(和可选)类对象定义此函数:
sftp -b ./sftp_commands.txt username@10.42.255.209
并将其用作:
template <class OptionalClass = void>
double galg(std::function<double(std::vector<double>, OptionalClass)> func, std::vector<double>& parameters, OptionalClass extrainfo);
位置:
double res = galg(fun, par, extra);
但是我仍然收到此错误:
std::vector<double> par;
c_myclass extra;
double fun(std::vector<double> parameters, c_myclass extrainfo);
为什么?我在做什么错了?
答案 0 :(得分:3)
模板参数推导不执行隐式转换。
这里的问题是,您将指向函数的指针传递到fun
的{{1}}且function参数期望double (*) (std::vector<double>, c_myclass)
,并且使用的模板参数当时是未知。
您的选择是:
std::function<double(std::vector<double>, OptionalClass)>
在调用galg<c_myclass>(fun, par, extra)
之前触发隐式转换:
galg
@aschepler的第三个礼节是禁止对第一个参数进行推导,而让第三个推论galg(std::function(f), par, extra)
:
OptionalClass