将快速委托转换为标准函数

时间:2016-06-21 20:39:58

标签: c++ c++11 std

我正在尝试将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

1 个答案:

答案 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点把它弄清楚了