将void*user_data转换为object

nac*_*o4d 3 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.
Run Code Online (Sandbox Code Playgroud)

错误:

Spurious '>>' user '>' to terminate a template argument list
Expected '>' before '(' token
'void *' is not a pointer-to-object type
Run Code Online (Sandbox Code Playgroud)

或者是否有更好的方法来传递有关调用者对象的信息以及我可以传递给的其他一些参数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);
Run Code Online (Sandbox Code Playgroud)

其中createTrackbar定义为:

int createTrackbar( const string& trackbarname, const string& winname,
int* value, int count, TrackbarCallback onChange, void* userdata);
Run Code Online (Sandbox Code Playgroud)

UPDATE2:

这样做解决了我的问题,但按照同样的方法,所以我尝试投放包含在我的地图对象物体时仍然得到错误?

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
Run Code Online (Sandbox Code Playgroud)

Any*_*orn 6

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

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