c++ - 将 void *user_data 转换为对象

标签 c++ casting callback

我如何转换 void *something到标准 C++ 中的对象? 具体我想投 void *userdatastd::map<String, void*>

这可能吗?我正在尝试:

//void *user_data is a parameter of this function (callback)
std::map <String, void*> user_data_n; //this line is ok
user_data_n = static_cast<std::map<String, void *>>(*user_data); //I get the errors here.

错误:

Spurious '>>' user '>' to terminate a template argument list
Expected '>' before '(' token
'void *' is not a pointer-to-object type

或者有没有更好的方法来携带有关调用者对象的信息和我可以传递给 void *user_data 的一些其他参数? ?

更新:

@aaa carp 建议的屁股我改了>>> >并且解决了前两个错误。最后一个很奇怪,为什么在设置回调时将它转换到这里而不是在放置该对象时会收到那种消息?

std::map<String, void*> user_data_h;
user_data_h["Object"] = this; //this is a MainController object
user_data_h["h"] = h; //h was defined as int *h
createTrackbar("trackbar_H", winName, h, 255, trackbar_handler, &user_data_h);

其中 createTrackbar 定义为:

int createTrackbar( const string& trackbarname, const string& winname,
int* value, int count, TrackbarCallback onChange, void* userdata);

更新 2:

这样做解决了我的问题,但采用相同的方法,为什么在尝试转换包含在我的 map 对象中的对象时仍然出现错误?

void trackbar_handler(int value, void *user_data){
std::map <String, void*> *user_data_map;
user_data_map = reinterpret_cast<std::map<String, void *> *>(user_data); //WORKED!! ;)

MainController *controller; //the same class type I put using "this" above
controller = reinterpret_cast<MainController *>( user_data_map["Object"]); //ERROR here

int *var = reinterpret_cast<int*> (user_data_map["h"]); //ERROR also here

最佳答案

>>> 应该是 >> 并且您不想取消引用 void 指针,而是将 void 指针转换为所需的指针类型,然后取消引用

@casa 已经为你提供了第二个问题的答案

关于c++ - 将 void *user_data 转换为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3766538/

相关文章:

c++ - 在 C++ 中,我需要创建一个程序,当输入某个数字时循环并停止,然后显示最大值和最小值

c++ - C++ 中的 MD5 实现返回错误的摘要

c++ - 基于 IOKit 的 kext 驱动程序中的单例类

c++ - 为什么 C++ 引入 duration_cast 而不是使用 static_cast?

javascript - 无法通过子函数调用从数据库检索 Nodejs MySQl 数据

c++ - 样式化 Qml 桌面组件

arrays - 在python中将stdin行转换为 "float/int"数组的更简单方法

casting - 如何强制Flow将值强制转换为另一种类型?

c++ - 我应该如何在包含的类对象中访问容器类的函数

android - 在我自己的应用程序中接收 Whatsapp "Send chat via" Intent