【发布时间】:2020-09-14 22:50:07
【问题描述】:
所以我想将数学函子传递给std::functions。
std::function< double( double ) > squareRoot( std::sqrt );
我收到一条错误消息,说它无法解决 MSVC 和 GCC 上的过载问题。然而这有效
std::function< double( double ) > squareRoot( ( double( * )( double ) ) std::sqrt );
std::cout << squareRoot( 4.0 ) << "\n";
如果我们传递函子的地址,它会很有效
std::function< double( double ) > squareRoot( ( double( * )( double ) ) &std::sqrt );
std::cout << squareRoot( 4.0 ) << "\n";
后两个(平凡的)程序都会产生有效的输出。
在将函子传递给std::function 之类的东西时,指定函子的特定重载的正确方法是什么(如果有人可以解释模板参数语法,特别是与此相关的)?
更新 0
以下适用于 GCC 但不适用于 MSVC,因此我正在更新标题以包含函数。
std::function< double( double ) > squareRoot( sqrt );
更新 1
前面的示例在 GCC 和 MSVC 下都适用,只包含 <cmath>,但在后面包含 <math.h> 时不适用。我不确定我实际上是在处理函数还是函子。
【问题讨论】:
标签: c++ casting overloading functor std-function