이의 생각 함수 (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
는 2 개 개의 다른 비교기이다. 요구 사항 (
<
또는
>
)에 따라이 중 하나를
myFunc
으로 전달합니다.
가장 좋은 점은 비교가 원하는만큼 복잡 할 수 있으며, myFunc
은 복잡함을 인식하지 못한다는 것입니다. 나는 functional
헤더에 정의 된 std::less
및 std::greater
펑터를 사용하고 있는데이 경우에 함수 나 펑터로 "비교"에
감사합니다.하지만 불행히도 내 환경에서는 작동하지 않습니다. 다른 방법을 아십니까? – whitebloodcell
@whitebloodcell이 환경에서 "작동하지 않게"하는 제한은 무엇입니까? –
@whitebloodcell'mql5'에 대해서는 전혀 모르겠지만 브레인 스토밍과 '길게 늘어나는 코드 블록'이 실제로 필요한지 확인하는 방법 중 하나 일 것입니다. 어쩌면 연산자 종속적 인 부분이 최소화 된 방식으로 코드를 재구성 할 수 있습니다. – axiom