Heim >Backend-Entwicklung >C++ >Wie verwende ich Member-Funktionszeiger korrekt mit std::function?

Wie verwende ich Member-Funktionszeiger korrekt mit std::function?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-20 13:40:101083Durchsuche

How to Correctly Use Member Function Pointers with std::function?

So behandeln Sie Elementfunktionszeiger in std::function-Objekten

Bei der Arbeit mit Elementfunktionen innerhalb von std::function-Objekten treten bestimmte Komplikationen auf entstehen kann. Betrachten Sie den folgenden Code:

#include <functional>

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

Ein Fehler tritt auf, weil nicht statische Memberfunktionen implizit den „this“-Zeiger als Argument übergeben. Allerdings berücksichtigt die std::function-Signatur hier dieses Argument nicht.

Lösung: Binden von Mitgliedsfunktionen an std::function-Objekte

Um dieses Problem zu beheben, das erste Argument („this“) muss explizit gebunden werden:

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

Für Funktionen mit Parametern können Platzhalter sein verwendet:

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

In C 11 können auch Lambdas verwendet werden:

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

Durch die Integration dieser Techniken können Programmierer erfolgreich mit Mitgliedsfunktionszeigern in std::function-Objekten arbeiten. das implizite „dies“-Argument effektiv verwalten.

Das obige ist der detaillierte Inhalt vonWie verwende ich Member-Funktionszeiger korrekt mit std::function?. 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