我正在移植的代码中有一个函数,该函数接受一个函数作为参数:
void doSomething(std::function<void(std::string)> callback)
请问如何在C++/CX中实现此函数,如何将std::function转换为C++/CX委托,并如何从C++中稍后调用回调函数?
我正在移植的代码中有一个函数,该函数接受一个函数作为参数:
void doSomething(std::function<void(std::string)> callback)
请问如何在C++/CX中实现此函数,如何将std::function转换为C++/CX委托,并如何从C++中稍后调用回调函数?
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");
}