让我说我有以下内容:
void *pA;
现在我想在运行时将此指针转换为在编译时未知的类型。即什么是等效或如何在ANSI C a c ++ dynamic_cast中模拟?
谢谢!
答案 0 :(得分:2)
现在我想在运行时将此指针转换为在编译时未知的类型。即什么是等效或如何在ANSI C a c ++ dynamic_cast中模拟?
嗯,那不是dynamic_cast
所做的。您无法转换为编译时未知的类型。
如果你需要根据各种条件将对象转换为可能更改的类型,那么它就像创建一个检查某个变量的switch语句一样简单(和枚举值,等等,以确定要执行的转换。然后它可以使用已知类型。
另一方面,您将有利于描述您的高级问题,而不是如何实施您提出的解决方案(可能有意义也可能没有意义)。你的方法可能存在比你想象的更好的替代方案,但我们不能在不知道你正在解决什么问题的情况下提供任何方法。
答案 1 :(得分:1)
这样的事可能有用:
void get_val(void * buf, void *data, int type_id) {
switch (type_id) {
case INT: int *sp = (int*)data;
int *dp = (int*)buf;
*dp = *sp;
// or just *((int*)buf) = *((int*)data)
break;
case FLOAT:float *sp = (float*)data;
float *dp = (float*)buf;
*dp = *sp;
break;
/* ... */
}
}