怎样判断void *的真实类型

Nepalon 2008-12-30 10:34:06
有一个类用于保存一个下拉列表的信息,下拉列表的值可以是int、float、double和char *,于是我定义了下面的构造函数:
ComboboxSelectObject::ComboboxSelectObject(int id, void *value, int valueType, char *label, char *desc)。
其中value为值的指针,由于值是不确定的,所以我用了void *类型;
valueType用于指定值的类型,有TYPE_INT、TYPE_DOUBLE等。
下面是调用:
int value=12;
ComboboxSelectObject(1, *value, TYPE_INT, "aa", "aa")//(1)
ComboboxSelectObject(1, "12", TYPE_INT, "aa", "aa")//(2)
从上面代码可知,虽然value都为整型,但用户传递的参数也可以是char *的。
现在的问题是:我怎样知道void *的真实类型?或是有什么别的方法来处理这个问题吗?
...全文
1872 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyljerry 2008-12-30
  • 打赏
  • 举报
回复
用模板比较适合
ckt 2008-12-30
  • 打赏
  • 举报
回复
要按你这种写法,就定义一种TYPE_CHAR,传入char*时使用.
不过整个不如用模板
Mougou 2008-12-30
  • 打赏
  • 举报
回复
用union吧
nullah 2008-12-30
  • 打赏
  • 举报
回复
你参数接受void *把传进来参数转化为void *
之后是无法知道转换前的指针类型的

同楼上的
不确定那就用模板
就呆在云上 2008-12-30
  • 打赏
  • 举报
回复

无法判断,再使用void×之前你就应该知道会发生什么结果
再次使用被转化的指针之前你要手动的转化

要不你就尝试用模板!
wiowei 2008-12-30
  • 打赏
  • 举报
回复 1
lz既然有个参数valueType来指出value的类型,自然可以使用void通过强制转换来实现多类型

不过对于这种ComboboxSelectObject(1, "12", TYPE_INT, "aa", "aa")//(2)
传字符串,lz的字符串一定是int么?如果字符串代表的仍是“数值”的话,需要另写个函数来把字符串转为数值了
可以用atoi、atof等库函数来转换

这是个void传类型的小例子:

#include <iostream>
using namespace std;
void test(void* value,int TYPE_VALUE)
{//TYPE_VALUE: 0-int ; 1-float;2-double;3-char*
switch(TYPE_VALUE)
{
case 0:
{ int* tmp = (int*)value;
cout<<*tmp<<endl;
break;
}
case 1:
{ float* tmp = (float*)value;
cout<<*tmp<<endl;
break;
}
case 2:
{ double* tmp = (double*)value;
cout<<*tmp<<endl;
break;
}
case 3:
cout<<(char*)value<<endl;
default:
break;
}
}
int main(void)
{
int a = 100000;
float b = 2222;
double c = 3333333.333;
char d[] = "test";

test(&a,0);
test(&b,1);
test(&c,2);
test(d,3);

return 0;
}
bopizi 2008-12-30
  • 打赏
  • 举报
回复
VOID*功能很强大,它是仍任类型,在你给它赋值时,是什么类型,在使用时怎么转回那类型就行了。传值的时很方便。。。
jieao111 2008-12-30
  • 打赏
  • 举报
回复
任何c++教材上都有模板入门教程
shuiyan 2008-12-30
  • 打赏
  • 举报
回复
1. 用模板。不过先要花一定的时间精力去了解、学习模板,最好有比较深的理解再使用,避免半吊子。

2. 多加一个参数,1/2/3分别表示char*/int*/float*,虽然比较不C++化,不过能用就行。
xiaoyisnail 2008-12-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 Nepalon 的回复:]
用模板要怎样写。刚开始用C++
[/Quote]

google或者《c++ templates》
dboyback 2008-12-30
  • 打赏
  • 举报
回复
参数+switch
nullah 2008-12-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 Nepalon 的回复:]
用模板要怎样写。刚开始用C++
[/Quote]
楼主还是先找本教材了解下模板吧
蛮有用的 呵呵
Nepalon 2008-12-30
  • 打赏
  • 举报
回复
用模板要怎样写。刚开始用C++
herman~~ 2008-12-30
  • 打赏
  • 举报
回复
还是应该使用模板

65,210

社区成员

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

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