>백엔드 개발 >C++ >## 내장 C 연산자에 대한 함수 포인터를 얻을 수 있나요?

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

DDD
DDD원래의
2024-10-25 10:20:30661검색

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

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

소개

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

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

C 표준(13.6/ 1) 내장 연산자는 일반 연산자 함수가 아니므로 이를 가리키는 함수 포인터를 가질 수 없습니다. 다른 목적을 제공하지 않고 오버로드 해결에만 참여합니다.

대안: 함수 개체 사용

이러한 제한을 극복하기 위해 C 표준은 내장 개체와 유사한 기능을 제공하는 함수 개체를 도입합니다. 템플릿 개체를 통한 연산자. 예를 들어, 비교를 위해 equal_to, great, less_equal과 같은 함수 개체가 정의됩니다. 이러한 객체는 함수 포인터 인수로 사용될 수 있습니다.

제공된 코드 조각에서 목표는 템플릿 클래스 내의 두 정수를 비교하는 것입니다. 함수 개체 기술을 사용하면 다음과 같이 달성할 수 있습니다.

<code class="cpp">class MyAction {
  bool operator()() {
    if (fnCompare_(arg0_, arg1_)) {
      // do this
    } else {
      // do s.th. else
    }
  }
};</code>

여기서 fnCompare_는 std::equal_to와 같은 함수 개체일 수 있습니다.

표준 클래스 유형 연산자

함수 객체 외에도 표준 라이브러리 연산자도 함수 포인터로 사용할 수 있습니다. 그러나 템플릿의 해당 인스턴스를 참조해야 합니다. 예를 들면 다음과 같습니다.

<code class="cpp">std::basic_string<char> a("test"), b("test2");
std::cout << test_function<std::basic_string<char>>(a, b, &std::operator+);</code>

결론

함수 포인터는 내장 표준 연산자에 직접 사용할 수 없지만 함수 객체와 표준 클래스 유형 연산자가 제공하는 대체 솔루션은 동등한 기능을 허용합니다. 이러한 대안을 사용하면 특정 표준 연산자를 함수 포인터로 사용할 수 있어 내장 연산자로 인한 제한 사항을 해결할 수 있습니다.

위 내용은 ## 내장 C 연산자에 대한 함수 포인터를 얻을 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.