Heim > Backend-Entwicklung > C++ > Hauptteil

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

Patricia Arquette
Freigeben: 2024-10-25 11:52:30
Original
115 Leute haben es durchsucht

## 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>
Nach dem Login kopieren
<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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!