2016-02-26 14 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

它是有道理的。謝謝 –