Heim > Backend-Entwicklung > C++ > Wie binde ich C-Memberfunktionen korrekt an std::function-Objekte?

Wie binde ich C-Memberfunktionen korrekt an std::function-Objekte?

Patricia Arquette
Freigeben: 2024-12-19 07:53:09
Original
267 Leute haben es durchsucht

How to Correctly Bind C   Member Functions to std::function Objects?

Mitgliedsfunktionen an generische std::function-Objekte binden

In C kann es vorkommen, dass Sie Funktionszeiger auf Mitglieder speichern müssen Funktionen einer bestimmten Klasse in einem Container, der std::function-Objekte akzeptiert. Der Versuch, eine nicht statische Mitgliedsfunktion direkt an eine std::function zu binden, kann jedoch zu Fehlern führen.

Beachten Sie den folgenden Code:

#include <functional>

class Foo {
    public:
        void doSomething() {}
        void bindFunction() {
            // ERROR
            std::function<void(void)> f = &Foo::doSomething;
        }
};
Nach dem Login kopieren

Dieser Code führt zu einem Compiler Fehler, da nicht statische Memberfunktionen implizit einen „this“-Zeiger als erstes Argument akzeptieren. Um dieses Problem zu beheben, müssen Sie das Objekt im Voraus mit der Funktion std::bind binden.

std::function<void(void)> f = std::bind(&Foo::doSomething, this);
Nach dem Login kopieren

Diese Version bindet den Zeiger „this“ korrekt an die Mitgliedsfunktion, sodass Sie ihn darin speichern können das std::function-Objekt, ohne den Fehler auszulösen.

Für Mitgliedsfunktionen, die Parameter akzeptieren, können Sie std::placeholders verwenden, um sie anzugeben Positionen:

using namespace std::placeholders;
std::function<void(int,int)> f = std::bind(&Foo::doSomethingArgs, this, _1, _2);
Nach dem Login kopieren

Wenn Ihr Compiler alternativ C 11-Lambdas unterstützt, können Sie diese verwenden, um das std::function-Objekt zu erstellen:

std::function<void(int,int)> f = [=](int a, int b) {
    this->doSomethingArgs(a, b);
}
Nach dem Login kopieren

Durch die Verwendung dieser Techniken können Sie dies tun Binden Sie Mitgliedsfunktionen effektiv an generische std::function-Objekte, sodass Sie sie bequem speichern und bearbeiten können.

Das obige ist der detaillierte Inhalt vonWie binde ich C-Memberfunktionen korrekt an std::function-Objekte?. 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