在C++中,當你定義一個函數,它接受一個參數,你必須定義變量的數據類型:C++函數的動態數據類型定義
void makeProccess(int request)
不過,我想實現一個函數,它接受不同的數據類型,而不是靜態定義的整數類型。
void makeProccess(anyType request)
我該如何設計一個這樣的過程,任何想法?
謝謝。
在C++中,當你定義一個函數,它接受一個參數,你必須定義變量的數據類型:C++函數的動態數據類型定義
void makeProccess(int request)
不過,我想實現一個函數,它接受不同的數據類型,而不是靜態定義的整數類型。
void makeProccess(anyType request)
我該如何設計一個這樣的過程,任何想法?
謝謝。
使用模板:
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;
}
你要查找C++模板 - 這裏有一個很好的鏈接:http://www.cplusplus.com/doc/tutorial/templates/
擁有你考慮使用tamplates是什麼?
template <class T> void makeProcess(T request)
{
// code
}
首先, 「使用模板」 答案是非常有用的 - 你應該調查模板 - 這是另一種選擇。
如果函數將值傳遞給最終確切知道「內部」類型的其他代碼,則還可以使用boost :: any - 請參閱http://www.boost.org/doc/libs/1_42_0/doc/html/any.html。然而,這可能有點危險,因爲你可以很容易地獲得以不明顯的方式耦合/相互依賴的代碼,並且在運行時崩潰而不是無法編譯(這是模板會發生的情況)。但是,對於非專業C++編碼人員而言,它可能比大量的模板編碼更容易理解。
(請注意,boost :: any也需要該類型是可複製和可賦值的。)
謝謝,是的,這是解決方案。我正在檢查... – isa 2010-05-01 13:05:21