--- title: 關於過載和模板的一些事情 tags: C++ --- # 過載Overloads 就是可以同個函式但是不同類型的參數 ```cpp= int operate (int a, int b) { return (a*b); } double operate (double a, double b) { return (a/b); } ``` :::warning 過載不能只有回傳值不同 必須要至少一個參數不同 ::: # 模板Templates ### 用法 ```cpp template <template-parameters...> function-declaration ``` ```cpp= template <class T, class U> bool are_equal (T a, U b) { return (a==b); } ``` >`class` 或是 `typename` 關鍵字都可以用 也就是說 Template 就是告訴編譯器我有個特定的型態可以用 我會使用這些型態做一些事情 ```cpp= bool = value_1 ; // 告訴編譯器我是用<int,double>這個模板的函數 value_1 = are_equal<int,double>(10,10.0); // 不告訴編譯器也是可以的 他會幫我判定型態 value_1 = are_equal(10,10.0); ``` ### 不設類型用法 Non-type template arguments 當然 我也可以把不確定的型態跟確定的型態一起用 ```cpp= // template arguments #include <iostream> using namespace std; template <class T, int N> T fixed_multiply (T val) { return val * N; } int main() { std::cout << fixed_multiply<int,2>(10) << '\n'; std::cout << fixed_multiply<int,3>(10) << '\n'; } ``` :::warning 要注意的是 我告訴編譯器的內容是 我要用 N 建立一個新的函式 所以 N 必須是一個 int 型態的常數 不是變數 因此在使用模板時 N 不能帶入變數 要是個明確的數字 :::