Heim  >  Artikel  >  Backend-Entwicklung  >  ## Können Sie Funktionszeiger auf integrierte C-Operatoren erhalten?

## Können Sie Funktionszeiger auf integrierte C-Operatoren erhalten?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-25 11:52:30116Durchsuche

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

Ist es möglich, den Funktionszeiger eines integrierten Standardoperators abzurufen?

Die Herausforderung

Funktionszeiger verwenden, um auf integrierte Standardoperatoren zu verweisen Bei Operatoren wie dem „Größer als“-Operator („>“) in einer Vorlagenklasse ist es notwendig, die richtigen Typüberladungen anzugeben. Dies kann jedoch eine Herausforderung darstellen.

Warum integrierte Operatoren keine Funktionszeiger sein können

In C integrierte Operatoren wie arithmetische und logische Operatoren sind keine echten Operatorfunktionen. Stattdessen werden sie vom Compiler direkt in Assembleranweisungen übersetzt. Daher ist es nicht möglich, Funktionszeiger für sie zu erhalten.

Funktionsobjekte als Alternative

Funktionsobjekte, definiert im C-Standard, bieten eine Möglichkeit, mit Operationen zu arbeiten, die sich wie Funktionszeiger verhalten sind aber keine tatsächlichen Funktionen. Es handelt sich um Vorlagenobjekte, die in ihrer Funktion „operator()“ in den analogen Operator zerfallen.

Zum Beispiel stellt das Funktionsobjekt „std::greater“ den Größer-als-Operator („>“) dar. Es kann als Funktionszeigerargument in einer Vorlagenklasse verwendet werden.

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

Standard-Klassentyp-Operatoren

Funktionszeiger können zwar nicht direkt mit integrierten Operatoren verwendet werden, sie können jedoch verwendet werden kann mit Standardbibliotheksoperatoren verwendet werden, die als tatsächliche Funktionen implementiert sind. Es ist jedoch erforderlich, die spezifische Instanz der Vorlagenklasse für den Operator zu instanziieren, und der Compiler benötigt möglicherweise Hinweise, um das Vorlagenargument korrekt abzuleiten.

Das obige ist der detaillierte Inhalt von## Können Sie Funktionszeiger auf integrierte C-Operatoren erhalten?. 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