В настоящее время я пытаюсь понять как перегрузку функций, так и указатели функций.
Чтобы сократить кусок кода, я хочу / должен сделать указатель на функцию сравнения. В моем исходном коде я делаю циклы и сравниваю множество пар переменных с плавающей точкой.
Мои действия после сравнения зависят от того, является ли третья полустатическая переменная положительной или отрицательной. В этой версии я должен либо проверять значение полустатической переменной для каждой пары, либо мне приходится копировать много кода.
double angleRight; //This variable is either positive or negative and is not reassigned for the purpose of this code
while (points.size() > 2){
siz = points.size();
for (int i = 0; i < siz; i++){
if (angleRight > 0 && points[i].angle < 0){
<Do something>
<remove points[i]>
} else if (angleRight < 0 && points[i].angle > 0){
<Do something else>
<remove points[i]>
}
}
Если бы я вместо этого мог вычислить angleRight один раз, а затем сохранить указатель на функцию для оператора> или оператора <, я мог бы вместо этого использовать указатель на функцию и избежать оценки angleRight, а также всего остального блок.
Я пытался понять указатели функций и (думаю) вижу, как мог бы справиться, если бы хотел получить доступ к перегруженной функции-члену. </p>
//This compiles
class Bs{
public:
float x;
bool operator< (Bs y){
return x < y.x;
}
};
bool (Bs::*compare) (Bs) /*const*/ = &Bs::operator<;
Но то, что я действительно хочу сделать / представить, выглядит примерно так:
//This does not compile:
bool (*compar) (float) /*const*/ = &float::operator<;
EDIT:
Сделав две функции «больше» и «меньше», я получу то, что хочу:
bool greater(float x, float y){
return x > y;
}
bool less(float x, float y){
return x < y;
}
bool (*compar) (float, float) = (angleRight < 0)? &greater : &less;
Но меня раздражает, что мне действительно приходится писать функции. Разве нет прямого доступа к float-оператору>?