从c++到c++ /CX的回调转换
Converting callback from C++ to C++/CX
在我移植的代码中,我有这个函数,它将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");
}
相关文章:
- 架构决策:返回std::future还是提供回调
- 正在为Xtensa simcall函数编写回调函数
- 如何在C++中使用非静态成员函数作为回调函数
- FLTK:按下哪个按钮 - 将数字传递给按钮的回调 (lambda)
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 用于在回调中调用解析器的设计模式
- 如何使用C++对象的成员函数作为 C 样式回调?
- Java从C++回调到C++回调
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- 从不同的 cpp 调用回调函数会导致bad_function_call
- pcap_handler回调仅在使用 NPCAP v0.9991 时包含空数据包
- 不带轮询的 SDL2 事件回调
- C++存储带有可变参数的回调
- 如何使用 Node-addon-API 实现 node-nan 回调
- 处理影响跨不同线程共享对象的定时回调的最佳方法是什么?
- 访问类C++ C 样式回调
- 处理类内的回调时,必须调用对非静态成员函数的引用
- 如果 C 函数仍然可以间接执行(通过回调函数),那么将它声明为静态函数是否是一种不好的做法?
- 在C++中实现回调
- C++ 事件管理器的回调,使用 std::function 和 std:bind 以及派生类作为参数