5

ラムダ式をクラス属性として使用することは可能ですか? 私は、すべてのボットが同じ更新ルーチンを持つ C++ の小さなゲームに取り組んでいますが、誰もが独自のオプションの追加の更新ルーチンを持つ必要があります。

みたいなことを思った

class Bot
{
private:
    Lambdatype lambda;

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

2 に答える 2

7

を使用できますstd::function。たとえば、それがvoid関数であり、2 つを取得すると仮定します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 に答える