c++ - 组合 std::function 对象

标签 c++ c++11 functional-programming

说我有

double xSquared( const double )
{
    return x*x;
}

...
std::function<double (double)> func = &xSquared;
...

到目前为止,这对于我使用这种结构的(更复杂的)目的来说效果很好。现在我有一个接受上述形式的 std::function 的函数,我需要创建一个新的 std::function 来扩展原来的:

typedef std::function<double (double)> func1D;

double someFunction( const func1D &func, const double a )
{
    func1D extendedFunc = func/(x-a); // I know this is incorrect, but how would I do that?
    ...
}

所以数学等价物是:

f(x) = x²

g(x) = f(x)/(x-a)

我怎样才能做到这一点?感谢您的帮助!

最佳答案

既然您已经在使用 C++0x,为什么不直接使用 lambda 表达式呢?

func1D divideByXMinusA(const func1D& f, double a) {
    return [=](double x) { return f(x)/(x-a); };
}

编辑:使用 std::bind:

func1D divideByXMinusA_withBind(const func1D& f, double a) {
    using namespace std::placeholders;
    return std::bind(std::divides<double>(),
                          std::bind(f, _1),
                          std::bind(std::minus<double>(), _1, a));
}

关于c++ - 组合 std::function 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4008369/

相关文章:

c++ - `f(void)` 表示 C++11 或 C 中没有参数?

c++ - 快速生成变量嵌套for循环的数字组合

c++ - SFINAE 不适用于 Visual Studio 2010 for std::is_pointer

haskell - 使用数据种类对函数类型的约束

c++ - 如何在 C++ 中的 const 覆盖函数中调用非 const 函数

c++ - 音频-视频加密算法

functional-programming - 符号计算和函数式编程有关系吗?

functional-programming - 我如何在庇护所js中折叠也许单子(monad)

c++ - 系统时间、本地时间、文件时间和正常时间

c++ - 使用 QFile::remove() 从 C++ 代码中删除文件是否会留​​下 .nfsxxxxx 文件?