c++ - 将回调从 C++ 转换为 C++/CX

标签 c++ c++11 c++-cx winrt-async

在我正在移植的代码中,我有一个将函数作为参数的函数:

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/

相关文章:

c++ - ldd找不到库

c# - 立即返回某些内容的异步方法的模式

C++/CX 属性在集合上抛出错误

c++ - 模板函数查找

java - Delphi 与 C++ Builder - 对于使用 Win32 的 Java 程序员来说,这是更好的选择

c++ - 未命名函数参数用法

objective-c - 在 ARC ObjectiveC++ 中使用 C++11 lambda 函数——如何正确使用?

C++ 模板结构 'has no member named' 错误

c++ - 可以使用临时的 stringstream 对象吗?

c++ - Windows Phone 中没有 FileIO?