如何在运行时切换数据类型

时间:2016-02-26 00:13:36

标签: c++ pointers casting

在我使用的库中,具有不同签名的函数如下

void Func( int* ptr);
void Func( float* ptr);
void Func( double* ptr);

我的函数需要决定调用哪个函数,具体取决于输入标志iSwitch,如下所示:

void test( int iSwitch, void* ptr1)
{
    switch (iSwitch)
    {
        case 0:
              Func( (int*) ptr1);
              break;
        case 1:
              Func((float*) ptr1);
              break;
        case 3:
              Func((double*) ptr1);
              break;
    }
}

应该没问题。但是我不想把Func放在开关块内。我希望能够以某种方式在开关块中首先切换指针类型,然后只有1个Func,其中ptr1被动态地转换为相应的类型。

具体来说,我想要的东西如下:

void test( int iSwitch, void* ptr1)
{
   switch( iSwitch)
   {
   // I want to be able to somehow switch type of pointer (say   DummyDataType) here depending iSwitch 

    }
    Func(( DummyDataType) ptr1);

 }

你能告诉我如何做到这一点吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

您不能在变量中存储类型,然后在演员表中使用它,如果这就是您所要求的。编译器需要在编译时知道强制转换的类型,否则无法正确生成代码。此外,编译器需要在编译时知道函数的参数类型。否则,它将不知道要调度哪个版本的函数。我认为你的解决方案就像它将要获得的一样好,尽管如果你使用标志来打开变量的类型,你可能想看看你的设计。也许给我们一些更多的背景,我们可以提供更好的解决方案。