2

假设我有以下内容:

void *pA;

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

谢谢 !

4

2 回答 2

2

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

好吧,那不是dynamic_cast。您不能强制转换为编译时未知的类型。

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


附带说明一下,描述您的高级问题而不是如何实施您提出的解决方案(这可能有意义也可能没有意义)对您来说是有利的。您的方法可能存在比您预想的更好的替代方法,但我们无法在不知道您正在努力解决什么问题的情况下提供任何替代方法。

于 2012-09-07T18:50:19.513 回答
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;
   /* ... */
  }
}
于 2012-09-07T18:47:48.183 回答