假设我有以下内容:
void *pA;
现在我想在运行时将这个指针转换为一个在编译时不知道的类型。即,什么是等效的或如何在ANSI C中模拟c++ dynamic_cast?谢谢!
ws51t4hk1#
现在我想在运行时将这个指针转换为一个在编译时不知道的类型。即,什么是等效的或如何在ANSI C中模拟c++ dynamic_cast?dynamic_cast不是这样做的,你不能转换成一个在编译时不知道的类型。如果你需要将对象转换为一个在程序执行过程中可能会根据各种条件而改变的类型,那么它可以像创建一个switch语句一样简单,该语句检查一些变量(和枚举值,无论什么)以确定执行哪种类型。然后它可以与已知类型一起工作。顺便说一句,描述你的高级问题而不是如何实现你提出的解决方案(这可能有意义,也可能没有意义)对你来说是有利的。你的方法可能存在比你想象的更好的替代方案,但我们不能在不知道你正在尝试解决什么问题的情况下提供任何替代方案。
dynamic_cast
xmd2e60i2#
类似这样的方法可能有效:
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; /* ... */ } }
2条答案
按热度按时间ws51t4hk1#
现在我想在运行时将这个指针转换为一个在编译时不知道的类型。即,什么是等效的或如何在ANSI C中模拟c++ dynamic_cast?
dynamic_cast
不是这样做的,你不能转换成一个在编译时不知道的类型。如果你需要将对象转换为一个在程序执行过程中可能会根据各种条件而改变的类型,那么它可以像创建一个switch语句一样简单,该语句检查一些变量(和枚举值,无论什么)以确定执行哪种类型。然后它可以与已知类型一起工作。
顺便说一句,描述你的高级问题而不是如何实现你提出的解决方案(这可能有意义,也可能没有意义)对你来说是有利的。你的方法可能存在比你想象的更好的替代方案,但我们不能在不知道你正在尝试解决什么问题的情况下提供任何替代方案。
xmd2e60i2#
类似这样的方法可能有效: