我将double
变量转换为void pointer
:
double doub = 3;
void *pointer = &doub;
如果我将void指针转换为 int ,而不是 double :
int i = *((int *) pointer);
我得到:i=0
。
如何检查转换是否成功,返回值是0,因为原始值为0或失败?
答案 0 :(得分:1)
由于C ++不是动态类型语言,因此您无法使用void*
直接执行此操作,但必须使用dynamic_cast
和一些模板包装器:
struct type_base
{
virtual ~type_base() {}
template<typename T> T *get_value()
{
if(type<T>* t=dynamic_cast<type<T>*>(this))
return &t->value;
return 0;
}
};
template<typename T>
struct type: type_base
{
T value;
};
这会让你失去&#39;键入信息并查询不同类型,如下所示:
type<int> v;
v.value=1;
type_base *p=&v;
float *x=p->template get_value<float>(); // fails
int *y=p->template get_value<int>(); // works