获取void*下的对象类型

my_infinity 2010-09-01 02:35:36
现有一个数组保存了对象指针,如:map<string, void*>

但是取出来后我希望能将指针类型转换成原来的类型,交给后续函数处理,但是这个函数必须要求对象是强类型的。

别问我为什么这么做。。。
...全文
234 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
book_lg_rong 2011-04-16
  • 打赏
  • 举报
回复
类型的传递在C++中是不可逆的,例如一个对话框指针传递给一个PVOID类型的变量,尤其是想向一个其它类的线程函数(静态成员函数)传递该对话框指针时,只有采取其它方法变通,上面的说采用基类去派生多个类,这是初学者理想化的想法。
herman~~ 2010-09-01
  • 打赏
  • 举报
回复
要转回来可以在容器里面多保存个对象类型
arong1234 2010-09-01
  • 打赏
  • 举报
回复
都是C++了,还要什么void*,定义一个基类,让你所有的数据类都派生自这个基类,这样用基类指针而不是void指针来管理你的数据,才是C++中正确的做法[Quote=引用 6 楼 my_infinity 的回复:]
hairetz
你的意思是维护一个对象类型的容器和现有容器对应吗 ?

能实现类似这样的代码吗:
int index = x;
void* ptr = getObjectRef(index);
MyMethod(getType(index)ptr);
[/Quote]
dingshaofengbinbin 2010-09-01
  • 打赏
  • 举报
回复
用reinterpret_cast<>进行转换可以的。
my_infinity 2010-09-01
  • 打赏
  • 举报
回复
hairetz
你的意思是维护一个对象类型的容器和现有容器对应吗 ?

能实现类似这样的代码吗:
int index = x;
void* ptr = getObjectRef(index);
MyMethod(getType(index)ptr);
  • 打赏
  • 举报
回复
或者自己麻烦一点,维护一套关于指针类型的数据。

map<int, void *> vec;

//键值可以分别标识不同的自定义类型,具体对应什么,自己设计即可
Ethan_Hu 2010-09-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hairetz 的回复:]

引用楼主 my_infinity 的回复:
现有一个数组保存了对象指针,如:map<string, void*>

但是取出来后我希望能将指针类型转换成原来的类型,交给后续函数处理,但是这个函数必须要求对象是强类型的。

别问我为什么这么做。。。


你把指针取出来,后续需要使用的函数再转换就好了啊。
[/Quote]

如果是一个对象指针呢,取出来要调用其成员的话,怎么保证转换的类型正确?
如果有大量不兼容的对象指针呢?
楼主应该重新设计了,使用void*虽然具备一定的泛型作用,但却是以完全丢弃类型信息为代价的,甚至要手工硬编码才能勉强保持一定的安全。
Ethan_Hu 2010-09-01
  • 打赏
  • 举报
回复
没办法。类型信息已经丢失了,没有识别机制,转不回来的。
  • 打赏
  • 举报
回复
[Quote=引用楼主 my_infinity 的回复:]
现有一个数组保存了对象指针,如:map<string, void*>

但是取出来后我希望能将指针类型转换成原来的类型,交给后续函数处理,但是这个函数必须要求对象是强类型的。

别问我为什么这么做。。。
[/Quote]

你把指针取出来,后续需要使用的函数再转换就好了啊。
拉卡尼休 2010-09-01
  • 打赏
  • 举报
回复
不知道说什么;

另外都是陈述句,写论文呐。

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧