Heim  >  Artikel  >  Backend-Entwicklung  >  **Wie können Sie Funktionsobjekte verwenden, um die Funktionalität integrierter Operatoren in C zu erreichen?**

**Wie können Sie Funktionsobjekte verwenden, um die Funktionalität integrierter Operatoren in C zu erreichen?**

DDD
DDDOriginal
2024-10-26 03:44:27749Durchsuche

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

Funktionszeiger auf integrierte Operatoren abrufen

Operatorzeigereinschränkungen

In C fehlen den integrierten Operatoren echte Funktionszeiger-Gegenstücke und dies ist auch nicht der Fall spielen über die Überlastungsauflösung hinaus eine Rolle. Um dies zu beheben, definiert der Standard Funktionsobjekte, die das Verhalten integrierter Operatoren widerspiegeln.

Funktionsobjekte für Arithmetik und Vergleich

Der Standard stellt Funktionsobjekte zur Kapselung von Arithmetik- und Vergleichsoperationen bereit, z als:

  • gleich_zu
  • nicht_gleich_zu
  • größer, kleiner
  • größer_gleich
  • weniger_gleich

Diese Objekte bieten die gleiche Funktionalität wie ihre entsprechenden Operatoren und können als Funktionszeigerargumente verwendet werden.

Standardbibliotheksklassenoperatoren

Bestimmte Standardbibliotheksoperatoren ermöglichen Funktionszeiger. Hierzu ist jedoch die Angabe des Vorlagentyps der beteiligten Objekte erforderlich. Um beispielsweise den Operator von std::basic_string zu verwenden, könnte man Folgendes implementieren:

<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>

Implementierungsbeispiel

Der folgende Code demonstriert die Verwendung eines Funktionsobjekts für eine Vergleichsoperation :

<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>

Das obige ist der detaillierte Inhalt von**Wie können Sie Funktionsobjekte verwenden, um die Funktionalität integrierter Operatoren in C zu erreichen?**. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn