在我使用的库中,具有不同签名的函数如下
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);
}
你能告诉我如何做到这一点吗?
谢谢!
答案 0 :(得分:1)
您不能在变量中存储类型,然后在演员表中使用它,如果这就是您所要求的。编译器需要在编译时知道强制转换的类型,否则无法正确生成代码。此外,编译器需要在编译时知道函数的参数类型。否则,它将不知道要调度哪个版本的函数。我认为你的解决方案就像它将要获得的一样好,尽管如果你使用标志来打开变量的类型,你可能想看看你的设计。也许给我们一些更多的背景,我们可以提供更好的解决方案。