社区
C++ 语言
帖子详情
获取void*下的对象类型
my_infinity
2010-09-01 02:35:36
现有一个数组保存了对象指针,如:map<string, void*>
但是取出来后我希望能将指针类型转换成原来的类型,交给后续函数处理,但是这个函数必须要求对象是强类型的。
别问我为什么这么做。。。
...全文
234
10
打赏
收藏
获取void*下的对象类型
现有一个数组保存了对象指针,如:map 但是取出来后我希望能将指针类型转换成原来的类型,交给后续函数处理,但是这个函数必须要求对象是强类型的。 别问我为什么这么做。。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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);
猫已经找不回了
2010-09-01
打赏
举报
回复
或者自己麻烦一点,维护一套关于指针类型的数据。
map<int, void *> vec;
//键值可以分别标识不同的自定义类型,具体对应什么,自己设计即可
Ethan_Hu
2010-09-01
打赏
举报
回复
[Quote=引用 2 楼 hairetz 的回复:]
引用楼主 my_infinity 的回复:
现有一个数组保存了对象指针,如:map<string, void*>
但是取出来后我希望能将指针类型转换成原来的类型,交给后续函数处理,但是这个函数必须要求对象是强类型的。
别问我为什么这么做。。。
你把指针取出来,后续需要使用的函数再转换就好了啊。
[/Quote]
如果是一个对象指针呢,取出来要调用其成员的话,怎么保证转换的类型正确?
如果有大量不兼容的对象指针呢?
楼主应该重新设计了,使用void*虽然具备一定的泛型作用,但却是以完全丢弃类型信息为代价的,甚至要手工硬编码才能勉强保持一定的安全。
Ethan_Hu
2010-09-01
打赏
举报
回复
没办法。类型信息已经丢失了,没有识别机制,转不回来的。
猫已经找不回了
2010-09-01
打赏
举报
回复
[Quote=引用楼主 my_infinity 的回复:]
现有一个数组保存了对象指针,如:map<string, void*>
但是取出来后我希望能将指针类型转换成原来的类型,交给后续函数处理,但是这个函数必须要求对象是强类型的。
别问我为什么这么做。。。
[/Quote]
你把指针取出来,后续需要使用的函数再转换就好了啊。
拉卡尼休
2010-09-01
打赏
举报
回复
不知道说什么;
另外都是陈述句,写论文呐。
YOLOv5目标检测实战:Jetson Nano部署
PyTorch版的YOLOv5是高性能的实时目标检测方法。Jetson Nano是英伟达含有GPU的人工智能硬件。本课程讲述如何部署YOLOv5在Jetson Nano开发板上。部署完成后可进行图像、视频文件和摄像头视频的实时目标检测。...
如何访问
void
* 和
void
** 指针
类型
的数据
void
* 表示这是一个指针,它指向的
对象
类型
不确定;
void
** 表示这是一个指针,它指向一个
void
* 型的指针,这个
void
*的指针又指向一个不确定
类型
的
对象
。 一、如何访问这两种
类型
的数据呢? 就是需要先进行强制
类型
...
C++
void
*指针、多重指针
void
**和指针大小
用
void
* 定义一个
void
类型
的指针,它不指向任何
类型
的数据,意思是,
void
*指针“指向空
类型
”或“不指向确定的
类型
”,而不要理解为
void
*指针能指向“任何的
类型
”数据。简而言之:
void
*只提供一个地址,没有指向...
void
*的使用
void
* 为 “不确定
类型
指针”。
void
*不可以解引用 (1)
void
*可以接受任何
类型
的赋值: 任何
类型
的指针都可以直接赋值给
void
*型指针,无需进行强制
类型
转换,相当于
void
*包含了其他
类型
的指针。 (2...
c++
void
* 指针与
对象
类型
转换
void
* v; std::string *str = new std::string("苹果");...//
对象
类型
转换为
void
指针 v = str; //
void
指针转换为
对象
指针 std::cout<<*static_cast<std::string *>(v)<<std::endl;
C++ 语言
64,648
社区成员
250,503
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章