C++ 速查手冊 V1.00 - 單元 10.1 - 函數樣板




函數樣版 (function template) 可定義適用多種型態的函數,而不需要多載 (overload) 適用的各種情況。


舉例如下


001 #include <iostream>
002
003 template <typename T1, typename T2> 
004 T1 do_something
005 (const T1& a, const T2& b) {
006    return a + b;
007 }
008
009 int main() {
010    std::cout << do_something(1, 10)
011              << std::endl;
012    std::cout << do_something(1, 10.5)
013              << std::endl;
014    std::cout << do_something(2.5, 6.32)
015              << std::endl;
016
017    return 0;
018 }
019
020 /* Kaiching Chang 
021    u1001.cpp
022    2014-02 */

第 3 行定義函數樣版要使用關鍵字 (keyword) template 宣告


003 template <typename T1, typename T2> 
004 T1 do_something
005 (const T1& a, const T2& b) {
006    return a + b;
007 }

typename 用為宣告型態行稱,這裡使用 T1T2 兩個識別字,識別字不同表示不同的型態,至於底下函數的參數 (parameter) 要用 const 參考 (reference) 。


typenameclass 替代也可以。

do_something() 接受兩個不同型態的參數,然後回傳第一個型態的相加值。編譯執行結果如下


$ g++ u1001.cpp
$ ./a.out
11
11
8.82
$

continue ...

沒有留言: