检查显式转换是否成功

时间:2014-09-09 13:19:32

标签: c++ casting

我将double变量转换为void pointer

double doub = 3;
void *pointer = &doub;   

如果我将void指针转换为 int ,而不是 double

int i = *((int *) pointer);  

我得到:i=0

如何检查转换是否成功,返回值是0,因为原始值为0或失败?

1 个答案:

答案 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