5

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

我想过类似的事情

class Bot
{
private:
    Lambdatype lambda;

public:
    Bot(Lambda l) {lambda = l;} 
    update() { dosomething(); lambda(); }
};
4

2 回答 2

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();
}

更通用:

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();
}

基于模板:

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();
}
于 2013-09-26T23:46:20.283 回答
1

另外你可以使用 make_bot

template< class L >
struct bot
{
   bot( L l ) : lambda{l}  {}
   void update() {  lambda(1,2); }
private:
   L lambda;
};

template< class L > bot<L>  make_bot(L l ) { return {l}; }

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

   my_bot.update();
}
于 2013-09-27T06:21:14.313 回答