【发布时间】:2013-07-29 14:26:03
【问题描述】:
是否可以定义一个指向未知数字类型的指针,例如 int 或 double,在取消引用时总是返回特定类型,例如 double?
我开始这样做了,
int a = 7;
double b = 3.14;
void* c = static_cast<void*>(&a);
void* d = static_cast<void*>(&b);
double e = *(static_cast<double*>(c));
double f = *(static_cast<double*>(d));
当然,将int* 转换为double* 只会为e 产生乱码,因为我们将重新解释int 的内部位,就好像它们采用double 格式一样.
我认真地尝试提前回答为什么我需要这样做,因为肯定有更好的设计选择,但解释太罗嗦了。简而言之,它与遗留代码有关,其中某些部分我无法修改,而且由于我们正计划重写受影响的组件,因此我目前正在调查是否有可能的解决方法。
如果我的淡化版本太淡化了,这里还有一层细节。我正在使用一个必须返回double的方法,通过取消引用曾经是void指向double(在共享内存中)的指针,但现在可能指向一个int 也是。当指针被设置为指向另一个位置时,会调用一个“钩子”,此时就知道它是指向double 还是int。所以我唯一能想到的就是在该挂钩期间将类型(或设置标志)存储在成员变量中,并在取消引用之前转换为该类型的指针。
但我希望有人知道我可能错过的方便技巧或技巧。存储指针或组织类型的其他方式,这样我就不必修改钩子了(出于其他难以解释的原因,我真的很想避免这样做)。
【问题讨论】:
-
如果指向int,可以将int转成double并返回吗?
标签: c++ casting type-conversion