我可以在 C++ 中内联定义函数吗?我说的是 lambda 函数,而不是导致编译器优化的
inline
关键字。
C++11 在语言中添加了 lambda 函数。该语言的早期版本(C++98 和 C++03)以及 C 语言的所有当前版本(C89、C99 和 C11)不支持此功能。语法如下:
[capture](parameters)->return-type{body}
例如,计算向量中所有元素的总和:
std::vector<int> some_list;
int total = 0;
for (int i=0;i<5;i++) some_list.push_back(i);
std::for_each(begin(some_list), end(some_list), [&total](int x) {
total += x;
});
在C++11中,你可以使用闭包:
void foo()
{
auto f = [](int a, int b) -> int { return a + b; };
auto n = f(1, 2);
}
在此之前,您可以使用本地类:
void bar()
{
struct LocalClass
{
int operator()(int a, int b) const { return a + b; }
} f;
int n = f(1, 2);
}
两个版本都可以引用环境变量:在本地类中,可以添加引用成员并在构造函数中绑定它;对于闭包,您可以将 capture list 添加到 lambda 表达式。
我不知道我是否理解你的意思,但是你想要一个 lambda 函数吗?
http://en.cppreference.com/w/cpp/language/lambda
#include <vector>
#include <iostream>
#include <algorithm>
#include <functional>
int main()
{
std::vector<int> c { 1,2,3,4,5,6,7 };
int x = 5;
c.erase(std::remove_if(c.begin(), c.end(), [x](int n) { return n < x; } ), c.end());
std::cout << "c: ";
for (auto i: c) {
std::cout << i << ' ';
}
std::cout << '\n';
std::function<int (int)> func = [](int i) { return i+4; };
std::cout << "func: " << func(6) << '\n';
}
如果您没有 c++11x,请尝试:
SO是一场狗屎秀。感谢您的搭车。