• [librcsc] 意図しない暗黙の型変換の検出コード追加. (akiyama) 15:15:28

どうも動きがおかしいと思ってよく見てみると,こんなコードがコンパイルを通って普通に動いていた.

if ( wm.offsideLineX() - 8.0 < wm.self().pos() )
{
  ...

どうやら,Vector2Dクラスで operator bool() を定義してしまっているために,boolへの型変換が行われ,更にdoubleへの変換が行われてしまうようだ. 恐ろしい.

とりあえず,宣言だけで定義の無い比較オペレータを用意した.

template < typename T>
bool
operator<( const rcsc::Vector2D & lhs,
                    const T & rhs );
template < typename T>
bool
operator<=( const rcsc::Vector2D & lhs,
                       const T & rhs );

このように宣言だけして,関数の中身の実装はしない. templateを使っているのは,任意の型との比較演算を禁止するため. これによって,最初のコードはコンパイルエラーを出すようになり,意図しない型変換を検出できるようになる,と.

もうちょっとスマートな方法は無いもんかな.

  • [librcsc] プレイヤのマッチングにおけるバグ修正 (akiyama) 16:03:27

遠くにいるUnknownなプレイヤがやたら増殖するので調べてみたら,マッチング処理の部分で,r() であるべきところが r2() になっていた.距離が二乗されてちゃ,そりゃ正しく機能するわけが無い.


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-03-14 (月) 14:51:37 (1348d)
SourceForge.JP
Creative Commons License
RoboCup tools by Hidehisa Akiyama is licensed under a Creative Commons 表示-非営利 2.1 日本 License.