함수 포인터는 특정 연산자를 참조하는 방법을 제공합니다. 연산자 기능. 그러나 기본 제공 표준 연산자의 경우 이 접근 방식이 간단하지 않을 수 있습니다. 이 문서에서는 이러한 제한의 이유를 자세히 알아보고 유사한 기능을 달성하기 위한 대체 솔루션을 탐색합니다.
C 표준(13.6/ 1) 내장 연산자는 일반 연산자 함수가 아니므로 이를 가리키는 함수 포인터를 가질 수 없습니다. 이들은 다른 목적을 제공하지 않고 오버로드 해결에만 참여합니다.
이 제한을 극복하기 위해 C 표준은 내장 객체와 유사한 기능을 제공하는 함수 객체를 도입합니다. 템플릿 개체를 통한 연산자. 예를 들어, 비교를 위해 equal_to, great, less_equal과 같은 함수 개체가 정의됩니다. 이러한 개체는 함수 포인터 인수로 사용할 수 있습니다.
제공된 코드 조각에서 목표는 템플릿 클래스 내의 두 정수를 비교하는 것입니다. 함수 개체 기술을 사용하면 다음과 같이 달성할 수 있습니다.
class MyAction {
bool operator()() {
if (fnCompare_(arg0_, arg1_)) {
// do this
} else {
// do s.th. else
}
}
};
여기서 fnCompare_는 비교를 수행하기 위해 std::equal_to
함수 객체 외에도 , 표준 라이브러리 연산자를 함수 포인터로 사용할 수도 있습니다. 그러나 템플릿의 해당 인스턴스를 참조해야 합니다. 예:
std::basic_string a("test"), b("test2");
std::cout >(a, b, &std::operator );
함수 포인터는 내장된 표준 연산자에서 함수 객체와 표준 클래스 유형 연산자가 제공하는 대체 솔루션은 동등한 기능을 허용합니다. 이러한 대안을 사용하면 특정 표준 연산자를 함수 포인터로 사용할 수 있어 내장 연산자가 나타내는 제한 사항을 해결할 수 있습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3