转换为仅在运行时已知的类型

假设我有以下内容:

void *pA; 

现在我希望在运行时将此指针转换为在编译时未知的类型。 即什么是等效或如何在ANSI C中模拟c ++ dynamic_cast?

谢谢 !

现在我希望在运行时将此指针转换为在编译时未知的类型。 即什么是等效或如何在ANSI C中模拟c ++ dynamic_cast?

好吧,那不是dynamic_cast作用。 您无法转换为编译时未知的类型。

如果你需要将对象转换为在程序执行期间可能会根据各种条件改变的类型,那么它可以像创建一个switch语句一样简单,该语句检查一些变量(和枚举值,无论如何)以确定哪个转换为执行。 然后它可以使用已知类型。


在旁注中,您将有利于描述您的高级问题,而不是如何实现您提出的解决方案(可能有意义也可能没有意义)。 你的方法可能存在比你想象的更好的替代方案,但我们不能在不知道你正在解决什么问题的情况下提供任何方法。

这样的事情可能有用:

 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; /* ... */ } }