Вы можете создать функцию сравнения для каждого необходимого вам сравнения, а затем передать правильную функцию в качестве аргумента длинным блокам кода (обернутым в соответствующим образом определенную функцию).
В качестве примера рассмотрим следующий гипотетический случай, когда функция (myFunc
) получает 2 целых числа (a
и b
) и обрабатывает их. Этапы обработки аналогичны, за исключением типа сравнения аргументов. Мы решили эту проблему, предоставив myFunc
правильный инструмент для сравнения.
#include <iostream>
using namespace std;
bool comp1(int a, int b) {
return a > b;
}
bool comp2(int a, int b) {
return a < b;
}
void myFunc(int a, int b, bool (*myComp)(int, int)) {
bool res = myComp(a, b);
cout << "value : " << res << endl;
}
int main()
{
myFunc(1, 2, comp1); //use >
myFunc(1, 2, comp2); //use <
return 0;
}
Ясно, что comp1
и comp2
— это два разных компаратора. Один из них мы передаем в myFunc
в зависимости от требований (<
или >
).
Лучше всего то, что ваши сравнения теперь могут быть настолько сложными, насколько вы хотите, и myFunc
не обращает внимания на сложности.
person
axiom
schedule
26.04.2014