C++ 11 lambda作为成员变量?

标签 c++ c++11 lambda

可以将 lambda 定义为类成员吗?

例如,是否可以使用 lambda 而不是函数对象来重写下面的代码示例?

struct Foo {
    std::function<void()> bar;
};

我想知道的原因是因为以下 lambda 可以作为参数传递:

template<typename Lambda>
void call_lambda(Lambda lambda) // what is the exact type here?
{ 
    lambda();
}

int test_foo() {
    call_lambda([]() { std::cout << "lambda calling" << std::endl; });
}

我想如果 lambda 可以作为函数参数传递,那么也许它们也可以存储为成员变量。

经过更多修改后,我发现这行得通(但它有点毫无意义):

auto say_hello = [](){ std::cout << "Hello"; };
struct Foo {
    typedef decltype(say_hello) Bar;
    Bar bar;
    Foo() : bar(say_hello) {}
};

最佳答案

lambda 只是创建一个函数对象,所以,是的,您可以使用 lambda 初始化一个函数成员。这是一个例子:

#include <functional>
#include <cmath>

struct Example {

  Example() {
    lambda = [](double x) { return int(std::round(x)); };
  };

  std::function<int(double)> lambda;

};

关于C++ 11 lambda作为成员变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6601930/

相关文章:

C++ - 指向shared_ptr的原始指针

c++ - 从 std::vector 创建/填充 std::set 的 STL 方式

c# - 输入为空的 Lambda 表达式

c++ - “变量”不是类型 'pointer to member function' 的有效模板参数

c++ - 在成员函数中使用 operator()

c++ - 调用可变参数宏的可变参数函数

c# - Lambda 上的 Visual Studio 文档注释

python - 请解释一下这个 lambda 函数?

.net - 对 IID_ICorProfilerInfo 的引用失败

c++ - 将成员函数传递给没有地址的 std::thread