当我遇到一系列从未出现过场景的代码时,我正在使用SFML进行一些游戏。完整的东西是SFML Game Development,但具体的符号是[=],这里是代码的简化形式。
template <typename data_type, typename Function>
std::function<void(data_type1&)> foo(Function x)
{
return [=] (data_type1 y)
{
DoSomething(y);
};
}
我认为我明白了代码的重点但是等号周围的括号有什么意义?我没有在任何网站上发现它,除非我只使用了糟糕的搜索词。
答案 0 :(得分:4)
方括号表示lambda函数的捕获术语。如果将=
放入其中,则表示自动捕获(按值)lambda中使用的所有符号。捕获意味着这些变量可用于lambda,而不是函数参数。
我们假设您使用的是传递给lambda内x
的变量foo
。然后x
的值将自动在lambda中捕获,并且可以使用相同的名称访问。更明确的方式是指示要捕获x
:
[x] (data_type1 y)
{
DoSomethingElse(x, y);
};
在你的情况下,它没有任何效果,因为没有这样的符号。更有可能的是,它是一个草率的编程实践,已被任何人编写。或者有时需要它,这是一个复制粘贴宿醉。
我应该补充一点,如果foo
和DoSomething
实际上是类中的方法,则可以使用此方法。在这种情况下,=
会自动捕获this
,并解析为DoSomething
的正确调用