C++ and currying
C++ and 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
有没有办法稍后调用最后一个函数,然后绑定第一个调用?
以下工作符合预期
#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
这是一个"明显"且有用的信息,可以了解出了什么问题。
fn
的结果不是整数,因此您不能将fn(2)
分配给整数(甚至不知道为什么要编译)。
你应该能够做auto i = fn(2);
这对
我有用:
int main() {
auto i = fn(2);
cout << i(4) << endl; // prints 8
return 0;
}
相关文章:
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 为什么C++逐位AND运算符在不同大小的操作数中表现为这样
- 为什么 Clang 不允许"and"作为函数名称?
- 位阵列上的快速AND运算
- 是否可以在 C++03 中定义'move-and-swap idiom'等效项
- BoostPython and CMake
- OpenSSL BIO and SSL_read
- Gurobi GRBModel and GRBmodel in C++
- std::visit and std::variant usage
- SHBrowseForFolder with BIF_BROWSEFORCOMPUTER and SHGetPathFr
- Directx12 and keystrokes
- different between int **arr =new int [ n]; and int a[i][j]?
- C++ getenv and setenv
- Inference pytorch C++ with alexnet and cv::imread image
- Visual Studio 2019 C++ and std::filesystem
- 保证逻辑 AND 表达式中的函数调用
- python ctypes and C++ pointers
- C++ const char with .begin() and .end()
- Threads with Classes and std::packaged_task
- C++ and currying