订阅C++/CX中的事件如下所示:
listener::ConnectionReceived +=
ref new TypedEventHandler<StreamSocketListener^, StreamSocketListenerConnectionReceivedEventArgs^>(this, &MyClass::OnConnectionReceived);我找到的关于如何在WRL中订阅事件的所有文档都显示了使用lambda表达式的示例,如下所示:
auto connectionReceivedHandler = Callback<ITypedEventHandler<StreamSocketListener*, StreamSocketListenerConnectionReceivedEventArgs*>>
([&] (IStreamSocketListener* cbListener, IStreamSocketListenerConnectionReceivedEventArgs* args)
{
this->doSomething();
});
hr = listener->add_ConnectionReceived(connectionReceivedHandler.Get(), &this->connectionReceivedToken);但是,我如何订阅WRL中的事件并提供类方法而不是lambda呢?就像这样:
hr = listener->add_ConnectionReceived(&MyClass::OnConnectionReceived, &this->connectionReceivedToken);发布于 2013-10-03 00:39:24
我不熟悉WRL,但由于它支持C++11 lambda,所以我认为它也应该支持std::bind
auto callback = Callback<ITypedEventHandler<StreamSocketListener*,
StreamSocketListenerConnectionReceivedEventArgs*>>
(std::bind(
&MyClass::OnConnectionReceived,
ptr_to_instance_of_MyClass, // eg. this
std::placeholders::_1, // cbListener
std::placeholders::_2 // args
));
hr = listener->add_ConnectionReceived(callback.Get(), &this->connectionReceivedToken);发布于 2017-07-07 16:28:53
有一个过载的回调,它接受这个+成员函数。在这里..。
ComPtr<typename Details::DelegateArgTraitsHelper<TDelegateInterface>::Interface> Callback(_In_ TCallbackObject *object, _In_ HRESULT(TCallbackObject::* method)(TArgs...)) throw()https://stackoverflow.com/questions/19148963
复制相似问题