首先,我将转储到日志以确认您的 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
}
更具可读性。还要将 8 声明为常量 BIT_DISTANCE_MARGIN 以避免使用幻数,所以
if (getBitDifference() >= BIT_DISTANCE_MARGIN) {
//do stuff here
}
你已经得到了一些可读、可维护的代码。