我正在尝试将FastDelegate转换为std :: function,但我无法理解语法。
这是委托库: http://www.codeproject.com/Articles/7150/Member-Function-Pointers-and-the-Fastest-Possible
和我想要转换的代码:
typedef shared_ptr<IEventData> IEventDataPtr;
typedef fastdelegate::FastDelegate1<IEventDataPtr> EventListenerDelegate;
//some code to find the event
EventListenerDelegate listener = (*it);
listener(pEvent); // call the delegate
到目前为止,这不起作用:
typedef std::function<std::shared_ptr<IEventData>> Functor;
Functor listener = (*it);
listener(pEvent); // call the delegate
答案 0 :(得分:2)
这可能不是一个完整的答案,因为除了提供回调功能之外,我还不完全确定fastDelegate库支持做什么。 原始代码来自Mike Shaffry&amp;的Game Coding Complete。戴夫格雷厄姆。
所以我可能会错过书中说fastDelegate库可以附加成员变量的部分。因此,由于你有一个以IEventData作为参数的void函数,所有的回调函数都是相同的。
typedef std::function<void(IEventData)> Functor;
Functor listener = (*it);
listener(pEvent);
然后在你的解决方案的其他地方定义的是实际的“Functor”,它只是std :: function的typedef。如:
void GameCode::DelegateFunction(IEventData){
//do stuff with event
}
这几乎是它如何运作的要点。我知道这篇文章已经过时了,但我想我还是会回答,因为我只是在凌晨4点把它弄清楚了