как мне привести void *something
к объекту в стандартном C ++?Конкретно я хочу разыграть void *userdata
до std::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);
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