2016-02-26 52 views
0

在图书馆里我使用它与不同的签名功能如下如何开机运行时间数据类型

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); 

} 

能否请你的意见,我该怎么办呢?

谢谢!

+2

听起来非常像模板的用途。或指针数组。 –

+0

'boost :: variant'可能会帮助你。 – chris

+0

在编译时必须选择被调用的过载(因此在交换机中需要这三个调用)。 – Pixelchemist

回答

1

你不能将一个类型存储在一个变量中,如果这就是你要求的,那么稍后在一个转换中使用它。编译器需要在编译时知道强制类型,否则无法正确生成代码。另外,编译器需要在编译时知道函数参数的类型。否则,它将不知道分派哪个版本的函数。我认为你的解决方案和它将会得到的一样好,但是如果你使用一个标志来切换变量类型,你可能需要看看你的设计。也许给我们更多的背景,我们可以提供一些更好的解决方案。

+0

它是有道理的。谢谢 –