000
05.11.2013, 19:15 Uhr
hilefoks
|
Moin,
ich habe eine Klasse geschrieben an der ich Callbacks, unter anderem Lambda Ausdrücke, registrieren und de-registrieren können möchte.
Registrieren ist recht einfach, aber ich habe keine Idee wie ich einen Lambda Ausdruck wiederfinden und de-registrieren kann. Hintergrund ist, das zwei Lambda ja nicht miteinander vergleichbar sind.
C++: |
typedef QSharedPointer<Message> MessagePtr; typedef std::function<void (MessagePtr)> MessageListener;
struct MessageDispatcher { virtual ~MessageDispatcher() {}
virtual void dispatch(MessagePtr message) const = 0; };
struct LambdaMessageDispatcher : public MessageDispatcher { LambdaMessageDispatcher(MessageListener messageListener) : listener( messageListener ) { }
void dispatch(MessagePtr message) const { listener( message ); }
MessageListener listener; };
class MessageListenerContainer { public: void subscribe(MessageListener &listener) { m_dispatcher.append( new LambdaMessageDispatcher( listener ) ); }
void unsubscribe(MessageListener &listener) { foreach(MessageDispatcher *dispatcher, m_dispatcher) { auto it = dynamic_cast<ListenerMessageDispatcher*>( dispatcher ); if( it ) { // ??? } } }
//...
private: QList<MessageDispatcher*> m_dispatcher; };
|
Weiß jemand, wie ich das gelöst bekomme? |