夜行録 - 酔歩.net
日暮れて道遠し さらに夜道を行く もって夜行録と名付く
関数オブジェクトの話
これも1ヶ月以上前の話
C++ の STL に inner_product というアルゴリズムがある。その名のとおりコンテナ同士の内積が計算できる。で、あるライブラリで、ちょっとややこしい要素同士の演算をやって総和を求めたかった。 STL の教科書を見ると、関数オブジェクトを使えと書いてある。
で、やってみるとエラーになる……、という話。要するに g++ が悪いっぽい
教科書的には、関数オブジェクトはこんな形。Σ(1/(ai ・bi))なる計算だね。
span class="coMULTI">/*!< * S1 is used to calculate 1 / (Error[i] * Error[i]) */
これを喰わすとこんなエラーになる。
error: ISO C++ forbids declaration of 'result_type' with no type
いや、 result_type は基底クラスの binary_function で定義されてんだが。ってかそのために継承してんのに、死ねよ g++ 。と。
どうしても名前空間の継承ができないっぽいので、正解は以下の行をクラスブロックの中に書く(7行目あたりに割込む)。
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 - その他雑記 - 4509x - permalink
Karma points: 5. Do you like this article? [yes/no]
Karma points: 5. Do you like this article? [yes/no]
- Use this Trackback URL for ping (right mouse click and copy URL).
- You can [print] this article, DISALLOWED (MailToAFriend) it, or export a [PDF].