Можете да създадете функция за сравнение за всяко сравнение, от което се нуждаете, и след това да предадете правилната функция като аргумент към longish кодовите блокове (обвити в подходящо дефинирана функция)
Като пример, разгледайте следния хипотетичен случай, при който функция (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