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

**C에서 내장 연산자의 기능을 구현하기 위해 함수 개체를 어떻게 사용할 수 있습니까?**

DDD
풀어 주다: 2024-10-26 03:44:27
원래의
748명이 탐색했습니다.

**How can you use function objects to achieve the functionality of built-in operators in C  ?**

내장 연산자에 대한 함수 포인터 가져오기

연산자 포인터 제한

C에서 내장 연산자에는 실제 함수 포인터 대응이 부족하며 그렇지 않습니다. 과부하 해결 이상의 역할을 수행합니다. 이 문제를 해결하기 위해 표준은 내장 연산자의 동작을 반영하는 함수 개체를 정의합니다.

산술 및 비교를 위한 함수 개체

표준은 다음과 같은 산술 및 비교 연산을 캡슐화하는 함수 개체를 제공합니다. as:

  • 같음
  • 같지 않음
  • 크고 작음
  • 크고 같음
  • 덜 같음

이러한 객체는 해당 연산자와 동등한 기능을 제공하며 함수 포인터 인수로 사용될 수 있습니다.

표준 라이브러리 클래스 연산자

특정 표준 라이브러리 연산자는 함수 포인터를 허용합니다. 그러나 이를 위해서는 관련된 개체의 템플릿 유형을 지정해야 합니다. 예를 들어, std::basic_string의 연산자를 사용하려면 다음을 구현할 수 있습니다.

<code class="cpp">template<class Test>
Test test_function (Test const &amp;a, Test const &amp;b, Test (*FPtr)(Test const &amp;, Test const &amp;))
{
   return FPtr(a, b);
}</code>
로그인 후 복사

구현 예

다음 코드는 비교 작업을 위한 함수 객체의 사용법을 보여줍니다. :

<code class="cpp">template<typename ParamsType, typename FnCompareType>
class MyAction
{
  public:
    MyAction(ParamsType& arg0, ParamsType& arg1, FnCompareType& fnCompare) 
    : 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_;
};

void doConditional(int param1, int param2)
{
    MyAction<int, std::equal_to<int>> action(param1,param2);
    if(action())
    {
        // Do this
    }
    else
    {
        // Do that
    }
}</code>
로그인 후 복사

위 내용은 **C에서 내장 연산자의 기능을 구현하기 위해 함수 개체를 어떻게 사용할 수 있습니까?**의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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