> 백엔드 개발 > C++ > 본문

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

Patricia Arquette
풀어 주다: 2024-10-25 11:52:30
원래의
115명이 탐색했습니다.

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

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

도전

함수 포인터를 사용하여 내장된 참조를 사용하려면 템플릿 클래스의 "보다 큼" 연산자(">")와 같은 연산자에서는 올바른 유형 오버로드를 지정해야 합니다. 그러나 이는 어려울 수 있습니다.

내장 연산자가 함수 포인터가 될 수 없는 이유

산술 및 논리 연산자와 같은 C 내장 연산자는 실제 연산자 함수가 아닙니다. 대신 컴파일러에 의해 어셈블리 명령어로 직접 변환됩니다. 따라서 이에 대한 함수 포인터를 얻을 수 없습니다.

대안으로서의 함수 개체

C 표준에 정의된 함수 개체는 함수 포인터처럼 동작하는 작업을 수행하는 방법을 제공합니다. 그러나 실제 기능은 아닙니다. 이들은 Operator() 함수에서 유사한 연산자로 붕괴되는 템플릿 객체입니다.

예를 들어, std::greater 함수 객체는 보다 큼 연산자(">")를 나타냅니다. 템플릿 클래스에서 함수 포인터 인수로 사용할 수 있습니다.

<code class="cpp">template<typename ParamsType, typename FnCompareType>
class MyAction
{
public:
    MyAction(ParamsType& arg0, ParamsType& arg1, FnCompareType& fnCpmpare) 
    : arg0_(arg0), arg1_(arg1), fnCompare_(fnCompare_) {}

    bool operator()()
    {
        if((fnCompare_)(arg0_,arg1_))
        {
            // Do this
        }
        else
        {
            // Do s.th. else
        }
    }

private:
    ParamsType& arg0_;
    ParamsType& arg1_;
    FnCompareType& fnCompare_;
}</code>
로그인 후 복사
<code class="cpp">void doConditional(int param1, int param2)
{
    MyAction<int, std::greater<int>> action(param1, param2);
    if(action())
    {
        // Do this
    }
    else
    {
        // Do that
    }
}</code>
로그인 후 복사

표준 클래스 유형 연산자

함수 포인터는 내장 연산자와 함께 직접 사용할 수 없지만 실제 함수로 구현되는 표준 라이브러리 연산자와 함께 사용할 수 있습니다. 그러나 연산자에 대한 템플릿 클래스의 특정 인스턴스를 인스턴스화해야 하며 컴파일러는 템플릿 인수를 올바르게 추론하기 위해 힌트를 요구할 수 있습니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!