"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > ## 내장 C++ 연산자에 대한 함수 포인터를 얻을 수 있나요?

## 내장 C++ 연산자에 대한 함수 포인터를 얻을 수 있나요?

2024-11-08에 게시됨
검색:305

## Can You Get Function Pointers for Built-in C   Operators?

내장된 표준 연산자의 함수 포인터를 얻는 것이 가능한가요?

소개

함수 포인터는 특정 연산자를 참조하는 방법을 제공합니다. 연산자 기능. 그러나 기본 제공 표준 연산자의 경우 이 접근 방식이 간단하지 않을 수 있습니다. 이 문서에서는 이러한 제한의 이유를 자세히 알아보고 유사한 기능을 달성하기 위한 대체 솔루션을 탐색합니다.

내장 연산자에 함수 포인터를 사용할 수 없는 이유

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