c++ - 从 C++ 中的 Lambda 函数创建 Functor

标签 c++ c++11

是否可以从 C++ 中的 lambda 函数创建仿函数?

如果不是,为什么不呢?

这给我带来了一些令人吃惊的麻烦。

实际用例:

另一个函数需要像这样创建一个仿函数:

Class::OnCallBack::MakeFunctor(this, &thisclass::function);

通常为了使用它,我必须在 thisclass 中创建一个函数,这意味着添加到头文件中。 大量使用后,有点臃肿。 我想通过做类似的事情来避免这种膨胀:

Class::OnCallBack::MakeFunctor(this, 
    void callback()
    { []() { dosomething; } });

出现问题的是初学者的编译错误。 即使它确实编译了,是否可以做这样的事情?

最佳答案

如果你想存储 lambda 函数,你可以像这样为 void() 函数做这件事

std::function< void() > callback = [](){ dosomething };

或者,对于具有返回类型和参数的函数,

std::function< int( int ) > callback = []( int i ){ return dosomething(i);}

不过,您需要包含此文件才能使用 std::function

#include <functional>

关于c++ - 从 C++ 中的 Lambda 函数创建 Functor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30713989/

相关文章:

c++ - 如何将一个字符串和一个int组合成一个字符串?

c++ - 使用 C++11 无限制 union 时的 VS 2013 异常

c++ - Boost.Asio: socket::close 不取消 aysnc_read_some

c++ - 接受任何表示/周期的 std::chrono::duration

c++ - 在 std::function 原型(prototype)中使用 'this' 指针

c++ - "const char(&a)[N]"是什么意思?

c++ - 专用于私有(private)成员类的 std::hash

c++ - 是否可以防止信号凝聚?

c++ - C++-创建bmp文件并通过createwindow()显示它的问题

C++强制覆盖