C 11은 [over.build]에 내장 연산자를 정의하고 이러한 연산자가 오버로드 해결에 참여하지만 다른 목적으로는 사용되지 않도록 지정합니다. 따라서 이를 가리키는 함수 포인터를 가질 수 없습니다.
이 문제를 해결하기 위해 표준에서는 [function.objects]에 함수 객체를 도입합니다. 이러한 객체는 해당 연산자() 함수에서 해당 연산자로 붕괴될 수 있습니다:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!