>백엔드 개발 >C++ >C에 내장된 표준 연산자에 대한 함수 포인터를 얻을 수 있습니까?

C에 내장된 표준 연산자에 대한 함수 포인터를 얻을 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-25 22:10:28190검색

Can you get a function pointer to a built-in standard operator in C  ?

내장 표준 연산자의 함수 포인터를 얻을 수 있나요?

왜 내장 연산자가 그렇지 않습니까? 함수 포인터가 없습니다

C 11은 [over.build]에 내장 연산자를 정의하고 이러한 연산자가 오버로드 해결에 참여하지만 다른 목적으로는 사용되지 않도록 지정합니다. 따라서 이를 가리키는 함수 포인터를 가질 수 없습니다.

함수 객체 작업

이 문제를 해결하기 위해 표준에서는 [function.objects]에 함수 객체를 도입합니다. 이러한 객체는 해당 연산자() 함수에서 해당 연산자로 붕괴될 수 있습니다:

  • 산술 연산
  • 비교(equal_to, not_equal_to, 더 큰/더 작음, 더 큰_equal/less_equal)
  • 논리 연산
  • 비트 연산

user1034749가 제공한 응답에서 볼 수 있듯이 함수 개체를 함수 포인터 인수로 사용할 수 있습니다.

표준 클래스 유형 사용 연산자

표준 라이브러리 연산자의 경우 해당 템플릿 인스턴스를 참조해야 하지만 함수 포인터로 사용할 수 있습니다. 컴파일러에는 올바른 템플릿을 추론하기 위한 충분한 힌트가 필요합니다. 예는 다음과 같습니다.

<code class="cpp">#include <iostream>
#include <string>

using namespace std;

template<class Test>
Test test_function(Test const &a, Test const &b, Test (*FPtr)(Test const &, Test const &))
{
   return FPtr(a, b);
}

int main()
{
   typedef basic_string<char> String;
   String a("test"), b("test2");
   cout << test_function(a, b, &operator+);
   return 0;
}</code>

이 예에서 연산자는 test_function에 대한 함수 포인터로 제공됩니다. test_function에 대한 템플릿 인수를 생략하면 MSVC 2012와 같은 일부 컴파일러에서는 추론이 실패합니다.

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

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