在我正在移植的代码中,我有一个将函数作为参数的函数:
void doSomething(std::function<void(std::string)> callback)
能否请您告诉我如何在 C++/CX 中实现此函数,如何将 std::function 转换为 C++/CX 委托(delegate)以及稍后如何从 C++ 调用回调?
最佳答案
下面是示例代码,我不确定这是否正是您所追求的 - 但也许您会找到一些有用的代码。
您可以使用委托(delegate)和事件。要将您的函数转换为委托(delegate),您可以使用代理 lambda。 msdn 文档中有一些有用的示例:Delegates (C++/CX)
public delegate void CallbackFunction(Platform::String^ arg);
public ref class MyCallbacks sealed {
public:
event CallbackFunction^ callbackEvent;
void doSomething(Platform::String^ arg) {
callbackEvent(arg);
}
internal:
void doSomething(std::function<void(std::string)> callback) {
CallbackFunction^ callbackPtr = ref new CallbackFunction(
[=](Platform::String^ arg) {
std::wstring tmp(arg->Data());
std::string astr(tmp.begin(), tmp.end());//use wcstombs, MultiByteToWideChar, if such conversion is required
callback(astr);
});
callbackEvent += callbackPtr;
}
};
void test() {
// On c++/cx side MyCallbacks initialization
MyCallbacks^ cb = ref new MyCallbacks();
// Here register callback functions to be raised later on
cb->doSomething([](std::string s) {
s.data();
});
// Raise callbacks from pure c++ inside c++/cx using delegetes and event
cb->doSomething(L"DoSomething");
}
关于c++ - 将回调从 C++ 转换为 C++/CX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31790718/