【发布时间】:2016-05-03 06:15:16
【问题描述】:
我对 std::function 很熟悉,但我正在读一本书,里面有这样的代码:
template<typename GameObject, typename Function>
std::function<void(SceneNode&, sf::Time)> derivedAction(Function fn)
{
return [=](SceneNode& node, sf::Time dt)
{
assert(dynamic_cast<GameObject *>(&node) != nullptr);
fn(static_cast<GameObject *>(&node), dt)
}
}
然后本书使用这样的模板:
Command moveLeft;//command is a structure
moveLeft.action//action is a std::function object
= derivedAction<Aircraft>(AircraftMover(-playerSpeed, 0));
//derivedAction specify<Aircraft> ???
我的问题是:
1-derivedAction 必须是 std::function 的对象,我已经检查了引用,但我没有发现这种使用 {} 的初始化,这是如何工作的?
2-理解 lambda 表达式对我来说很复杂,为什么要返回它?
我对这段代码很困惑,任何解释都将不胜感激
【问题讨论】:
标签: c++11 lambda std-function