Lambda表达式作为类属性?

use*_*729 5 c++ lambda c++11

是否可以使用lambda表达式作为类属性?我正在使用C++开发一个小游戏,其中所有机器人都有相同的更新例程,但是每个人都应该拥有自己的可选额外更新例程.

我想是这样的

class Bot
{
private:
    Lambdatype lambda;

public:
    Bot(Lambda l) {lambda = l;} 
    update() { dosomething(); lambda(); }
};
Run Code Online (Sandbox Code Playgroud)

mas*_*oud 7

你可以使用std::function,例如假设它的void功能,并得到两个int:

class Bot
{
private:
    using Lambda = std::function<void(int, int) >;
    Lambda lambda;

public:

    Bot(const Lambda &l) : lambda(l)
    {
    }

    void update()
    {
        //dosomething...;
        lambda(1, 2);
    }
};

int main()
{
   Bot bot ([](int x, int y){ cout << x+y << endl; });

   bot.update();
}
Run Code Online (Sandbox Code Playgroud)

更通用的:

template <typename L>
class Bot
{
private:
    L lambda;

public:

    Bot(const L &l) : lambda(l)
    {
    }

    void update()
    {
        //dosomething...;
        lambda(1, 2);
    }
};

int main()
{
   Bot<std::function<void(int,int)>> bot (
                         [](int x, int y){ cout << x+y << endl; }
   );
   bot.update();
}
Run Code Online (Sandbox Code Playgroud)

基于模板:

template <typename L>
struct Bot
{
private:
   L lambda;

public:
   Bot(const L &l) : lambda{l}  {}
   void update() {  lambda(1,2); }
};

int main()
{
    auto l = [](int x, int y){ std::cout << x + y << std::endl; };

    Bot<decltype(l)> bot(l);

    bot.update();
}
Run Code Online (Sandbox Code Playgroud)