C++ 速查手冊 V1.00 - 單元 10.3 - 樣板別名




C++11 中,可用關鍵字 using 替樣板取別名 (alias) ,舉例如下


001 #include <iostream>
002
003 template <typename T> class Demo {
004 public:
005    Demo(const T& a, const T& b) {
006       this->a = a;
007       this->b = b;
008    } 
009
010    T do_something() {
011       return a + b;
012    }
013     
014 private:
015    T a;
016    T b;
017 };
018
019 template <typename T> using D = Demo<T>;
020
021 int main() {
022    D<int> d1(20, 25);
023    std::cout << d1.do_something()
024              << std::endl;
025    D<double> d2(5.2, 3.95);
026    std::cout << d2.do_something()
027              << std::endl;
028    D<char> d3('1', '2');
029    std::cout << d3.do_something()
030              << std::endl;
031
032    return 0;
033 }
034
035
036 /* Kaiching Chang 
037    u1003.cpp
038    2014-02 */

第 19 行,使用 usingDemo 取別名 D


019 template <typename T> using D = Demo<T>;

因此在 main() 是用 D 而非 Demo


022 D<int> d1(20, 25);
023 std::cout << d1.do_something()
024           << std::endl;
025 D<double> d2(5.2, 3.95);
026 std::cout << d2.do_something()
027           << std::endl;
028 D<char> d3('1', '2');
029 std::cout << d3.do_something()
030           << std::endl;

編譯執行,結果如下


$ g++ u1003.cpp -std=c++0x
$ ./a.out
45
9.15
c
$

the end

沒有留言: