从c++到c++ /CX的回调转换

Converting callback from C++ to C++/CX

本文关键字:c++ 回调 转换 CX      更新时间:2023-10-16

在我移植的代码中,我有这个函数,它将function作为参数:

void doSomething(std::function<void(std::string)> callback)

你能告诉我如何在c++/CX中实现这个函数,如何将std::函数转换为c++/CX委托以及如何在c++中调用回调吗?

下面是示例代码,我不确定这是否正是你所追求的-但也许你会发现一些有用的代码。

可以使用委托和事件。要将函数转换为委托,可以使用proxy lambda。msdn文档中有一些有用的示例:委托(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");
}