具有泛型和可选类的C ++函数

时间:2018-12-13 12:38:07

标签: c++ c++11 templates

我使用通用(和可选)类对象定义此函数:

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

为什么?我在做什么错了?

1 个答案:

答案 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