C++ 中不熟悉的符号 [=]
Unfamiliar symbol [=] in C++
我正在使用 SFML 开发一个游戏,当我 运行 进入我从未遇到过的代码行时,我正在学习一些教程。完整的东西在 SFML Game Development 但具体的符号是 [=] 这里是代码的简化形式。
template <typename data_type, typename Function>
std::function<void(data_type1&)> foo(Function x)
{
return [=] (data_type1 y)
{
DoSomething(y);
};
}
我想我明白了代码的要点,但是等号两边的括号有什么意义?我没有在任何网站上找到它的提及,除非我使用了糟糕的搜索词。
方括号表示 lambda 函数的捕获项。如果将 =
放入其中,则表示自动捕获(按值)lambda 中使用的所有符号。捕获意味着这些变量可以在 lambda 中使用,而不是函数参数。
假设您在 lambda 中使用传递给 foo
的变量 x
。然后 x
的值将自动在 lambda 中捕获,并可以通过相同的名称访问。更明确的方法是指示要捕获 x
:
[x] (data_type1 y)
{
DoSomethingElse(x, y);
};
在你的情况下它没有任何效果,因为没有这样的符号。更有可能的是,它是一种草率的编程习惯,被编写它的人所采用。或者有的时候需要,这就是复制粘贴宿醉
我应该补充一点,如果 foo
和 DoSomething
实际上是 class 中的方法,则可以使用它。在这种情况下,=
会自动捕获 this
,并解析为对 DoSomething
的正确调用
我正在使用 SFML 开发一个游戏,当我 运行 进入我从未遇到过的代码行时,我正在学习一些教程。完整的东西在 SFML Game Development 但具体的符号是 [=] 这里是代码的简化形式。
template <typename data_type, typename Function>
std::function<void(data_type1&)> foo(Function x)
{
return [=] (data_type1 y)
{
DoSomething(y);
};
}
我想我明白了代码的要点,但是等号两边的括号有什么意义?我没有在任何网站上找到它的提及,除非我使用了糟糕的搜索词。
方括号表示 lambda 函数的捕获项。如果将 =
放入其中,则表示自动捕获(按值)lambda 中使用的所有符号。捕获意味着这些变量可以在 lambda 中使用,而不是函数参数。
假设您在 lambda 中使用传递给 foo
的变量 x
。然后 x
的值将自动在 lambda 中捕获,并可以通过相同的名称访问。更明确的方法是指示要捕获 x
:
[x] (data_type1 y)
{
DoSomethingElse(x, y);
};
在你的情况下它没有任何效果,因为没有这样的符号。更有可能的是,它是一种草率的编程习惯,被编写它的人所采用。或者有的时候需要,这就是复制粘贴宿醉
我应该补充一点,如果 foo
和 DoSomething
实际上是 class 中的方法,则可以使用它。在这种情况下,=
会自动捕获 this
,并解析为对 DoSomething