我正在尝试将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
最佳答案
这可能不是一个完整的答案,因为我不完全确定除了提供回调功能外,fastDelegate库还支持做什么。
原始代码来自Mike Shaffry和Dave Graham编写的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点才知道的