まず、ログにダンプして、CountBitDifference式が想定どおりに動作していることを確認します。もしそうなら、それはおそらく奇妙なスコーピングエラーのようです。ステートメントでそれを割り当てる前に、currentDistanceを定義して初期化することはあなたを殺しますか?
また、ifステートメントはこの関数が成功したかどうかをチェックします...なぜこれを行うのですか?
編集:式の最後の比較を完全に見逃しました。これは少し厄介です。ブール値を返す関数に分割することを真剣に検討します。また、8はマジックナンバーです。
編集:これを試して、整数を返し、再利用を促す関数として。
public int getBitDifference() {
//assumes you have declared your variables in a greater scope
//otherwise you will have to pass your variables to the function... hard to say
//without seeing all the code
return CountBitDifference(m0.ptr<unsigned char>(matches[i].queryIdx),
m1.ptr<unsigned char>(matches[i].trainIdx),
cascadeSize, cascadeByteIndex)
}
その後:
if (getBitDifference() >= 8) {
//do stuff here
}
はるかに読みやすい。また、マジックナンバーの使用を避けるために、定数BIT_DISTANCE_MARGINとして8を宣言します。
if (getBitDifference() >= BIT_DISTANCE_MARGIN) {
//do stuff here
}
そして、あなたはあなた自身にいくつかの読みやすく、保守可能なコードを持っています。