能否将lambda表达式用作类属性?我正在使用C++开发一个小游戏,所有机器人都有相同的更新程序,但每个机器人都应该有自己的可选额外更新程序。
我的想法是这样的:
class Bot
{
private:
Lambdatype lambda;
public:
Bot(Lambda l) {lambda = l;}
update() { dosomething(); lambda(); }
};
您可以使用std::function
,例如假设它是一个获取两个int
参数的void
函数:
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();
}
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();
}
bot<L>
类型。这意味着你不能再拥有一个机器人集合了。 - MSalters
auto x = []{}; auto y = []{}; std::is_same<decltype(x), decltype(y)>{} // yields false
。 - dyp