2014-06-19 新規 [C++] 関数テンプレートのポインター ======================================================================== (MinGW gcc (GCC) 4.5.4) □ functionpointer_template.cpp --- #include <iostream> using namespace std; template<class T> // (1) T square(T a) { return a * a; } template<class T, class F> // (2) T calc(T a, F func){ return func(a); } int main() { int (*p)(int) = square; // (3) この使い方はあまり意味ない感じ cout << p(2) << endl; // (4) cout << p(3.4) << endl; // (5) cout << calc(2, square<int>) << endl; // (6) cout << calc(3.4, square<double>) << endl; // (7) // cout << calc(5, square) << endl; // コンパイルエラー return 0; } --- □ 実行結果 --- 4 9 4 11.56 --- (1) 関数テンプレートの宣言 (2) 関数テンプレートのポインターを引数に持つ関数テンプレートの宣言 (3) 関数テンプレートを実体化したものを関数ポインターに設定 関数ポインターは、通常の関数ポインターと変わりはない。テンプレートの型は 自分で設定している。 int (*p)(int) = square; // (3) この使い方はあまり意味ない感じ (4)(5) 関数ポインターの利用 int 型の引数を取るので、そのまま使う。 cout << p(2) << endl; // (4) int 型の引数を取るので、double 型の引数を渡しても、int 型として処理され る。 cout << p(3.4) << endl; // (5) (6)(7) 関数テンプレートのポインターを引数に持つ関数テンプレートの利用 int 型を明示しているの、int 型の引数の square 関数ポインターを渡す。 cout << calc(2, square<int>) << endl; // (6) double 型を明示しているの、double 型の引数の square 関数ポインターを渡す。 cout << calc(3.4, square<double>) << endl; // (7) つぎのように、データ型を明示していないと、コンパイルエラーになる。 calc(5, square) no matching function for call to 'calc(int, <unresolved overloaded function type>)' 以上
最新の画像[もっと見る]
- あけましておめでとうございます 11年前
- 今年もよろしくお願いいたします 12年前
- あけましておめでとうございます 13年前
- あけましておめでとうございます 16年前
※コメント投稿者のブログIDはブログ作成者のみに通知されます