夜行録 - 酔歩.net

日暮れて道遠し さらに夜道を行く もって夜行録と名付く

関数オブジェクトの話

これも1ヶ月以上前の話

C++ の STL に inner_product というアルゴリズムがある。その名のとおりコンテナ同士の内積が計算できる。で、あるライブラリで、ちょっとややこしい要素同士の演算をやって総和を求めたかった。 STL の教科書を見ると、関数オブジェクトを使えと書いてある。

で、やってみるとエラーになる……、という話。要するに g++ が悪いっぽい

教科書的には、関数オブジェクトはこんな形。Σ(1/(ai ・bi))なる計算だね。

  1. span class="coMULTI">/*!<
  2. * S1 is used to calculate 1 / (Error[i] * Error[i])
  3. */

これを喰わすとこんなエラーになる。

error: ISO C++ forbids declaration of 'result_type' with no type

いや、 result_type は基底クラスの binary_function で定義されてんだが。ってかそのために継承してんのに、死ねよ g++ 。と。

どうしても名前空間の継承ができないっぽいので、正解は以下の行をクラスブロックの中に書く(7行目あたりに割込む)。

  1.  

g++-4.3 ではこれが必要だった。そのうち不要になるんだろうか

参考: http://www.tech-archive.net/Archive/VC/microsoft.public.vc.stl/2006-03/msg00093.html

2008年03月03日 (Mon) - 20:00:51 - その他雑記 - 4512x - permalink
Karma points: 5. Do you like this article? [yes/no]