gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 02:21:08 26 4
gpt4 key购买 nike

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

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com