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

时间:2012-09-07 18:36:47

标签: c ansi

让我说我有以下内容:

void *pA;

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

谢谢!

2 个答案:

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