是否可以使用lambda表達式作爲類屬性? 我正在C++中進行一個小遊戲,其中所有殭屍程序都具有相同的更新例程,但每個人都應該有自己的可選額外更新例程。作爲類屬性的Lambda表達式?
我想類似的東西
class Bot
{
private:
Lambdatype lambda;
public:
Bot(Lambda l) {lambda = l;}
update() { dosomething(); lambda(); }
};
是否可以使用lambda表達式作爲類屬性? 我正在C++中進行一個小遊戲,其中所有殭屍程序都具有相同的更新例程,但每個人都應該有自己的可選額外更新例程。作爲類屬性的Lambda表達式?
我想類似的東西
class Bot
{
private:
Lambdatype lambda;
public:
Bot(Lambda l) {lambda = l;}
update() { dosomething(); lambda(); }
};
您可以使用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();
}
很酷它跑,謝謝!! – user2796729
額外的好處:你現在不限於lambda,你可以存儲任何有正確簽名的東西。 – MSalters
Addional您可以使用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();
}
這種技術的問題在於每個機器人都有自己的lambda類型,因此它有自己的'bot
@ MSalters。 std :: tuple來幫忙:) –
順便說一句,它的拼寫爲 「拉姆達」 :) – StilesCrisis
每個lambda表達式具有獨特的類型,所以我不認爲這是可能的。考慮'auto x = [] {}; auto y = [] {}; std :: is_same {} //產生false。 –
dyp
@StilesCrisis啊,謝謝你:)在早期的時候我以爲它會拼寫蘭達達 – user2796729