関数ポインタ
知識はありますが実際に使ったことは殆どありません。そもそもグローバル関数ってもう随分使ってないし。
何に使うかと言うとよくあるのが関数そのものを関数に渡したい場合。積分の計算なんかする場合は引数に関数がほしかったりするわけですね。そういった場合に積分したい関数のポインタを渡すわけなんですね。
double Integral( double (*func)(double x) ) { double result = 0.0; const double delta = 0.001; const int max = static_cast< int >( 1 / delta ); for( x0 = 0; x0 < max; x0++ ){ double x = x0 * delta; result += func( x ) * delta; } return result; }
みたいな感じになるわけなんですけど、少なくとも私はこういう実装したことがありません。ではどうするかと言うと、テンプレートを使うわけですね。
template< class Funct > double Integral( Funct& func ){ 〜〜 }
これの利点としては、引数として関数ポインタ以外に関数オブジェクトが取れるんですね。(ていうか関数オブジェクトを引数としたかったら自然とこうなった) 多分、この方が汎用性が高くていいとおもうんですよね。
ちなみに、関数オブジェクトというのは簡単に言うと演算子()が多重定義されているクラスのことです。
class Function { public: double operator()( double x ); };