2010-05-01 100 views
2

在C++中,當你定義一個函數,它接受一個參數,你必須定義變量的數據類型:C++函數的動態數據類型定義

void makeProccess(int request) 

不過,我想實現一個函數,它接受不同的數據類型,而不是靜態定義的整數類型。

void makeProccess(anyType request) 

我該如何設計一個這樣的過程,任何想法?

謝謝。

回答

3

使用模板:

template <typename T> 
void makeProcess(T request) { 
    // request is of type "T", which can vary 
    cout << "request: " << request; 
} 

另外一個好處,就是你可以專注它:

template <> 
void makeProcess(string request) { 
    cout << "This is special handling for a string request: " << request; 
} 
1

擁有你考慮使用tamplates是什麼?

template <class T> void makeProcess(T request) 
{ 
    // code 
} 
0

首先, 「使用模板」 答案是非常有用的 - 你應該調查模板 - 這是另一種選擇。

如果函數將值傳遞給最終確切知道「內部」類型的其他代碼,則還可以使用boost :: any - 請參閱http://www.boost.org/doc/libs/1_42_0/doc/html/any.html。然而,這可能有點危險,因爲你可以很容易地獲得以不明顯的方式耦合/相互依賴的代碼,並且在運行時崩潰而不是無法編譯(這是模板會發生的情況)。但是,對於非專業C++編碼人員而言,它可能比大量的模板編碼更容易理解。

(請注意,boost :: any也需要該類型是可複製和可賦值的。)