C++ 和柯里化(Currying)

标签 c++ design-patterns c++11 currying

我有代码:

#include <iostream>

using namespace std;

auto fn = ([](int x){
       return [x](int y) {
          return x * y;
       };
});

int main() {

    int i = fn(2)(4); // 8

    cout << i << endl;

    return 0;
}

这段代码工作正常。 但是,我想稍后再调用第二个函数,例如:

auto i = fn(2);

i(4); //error: 'i' cannot be used as a function

有什么方法可以稍后调用最后一个函数,然后与第一个调用绑定(bind)?

最佳答案

以下按预期工作

#include <iostream>

using namespace std;

auto fn = [](int x){
       return [x](int y) {
          return x * y;
       };
  };

int main() {

    auto i = fn(2)(4); // 8
    cout << i << endl;
    auto j = fn(2);
    cout << j(4) << endl;

    return 0;
}

添加

顺便说一下,如果您使用 int 而不是 auto,带有 -std=c++0x 的 gcc 4.5 会给出以下错误:

currying.cpp:17:17: error: cannot convert ‘<lambda(int)>::<lambda(int)>’ to ‘int’ in initialization
currying.cpp:19:16: error: ‘j’ cannot be used as a function

这是一个“明显”且有用的信息,可以找出问题所在。

关于C++ 和柯里化(Currying),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10055416/

相关文章:

c++ - 找到boost库路径

c++ - 我在 Windows 中创建名称为 Ñ 的文件夹时遇到问题

java - 拆分 GUI 元素的绘图

c++ - virtual 关键字会影响基类方法的性能吗?

c++ - 如何创建静态分配的动态大小的数组?

design-patterns - 责任链模式只是一种矫枉过正吗?处理程序列表可以完成相同的任务

c++ - 当观察者希望观察不同的项目时实现观察者模式

c++11 getline 询问输入的两倍

c++ - 显示集合的第一个元素

c++ - 如何存储将被多个不同类访问的字符串常量?