Wie verwende ich std :: bind (), um die Version der Basisklasse einer virtuellen Funktion aufzurufen?

8

Ich versuche, std :: bind () zu verwenden, um eine Funktion zu erstellen, die die Basisklassenversion einer virtuellen Funktion aufruft, anstatt die Version der abgeleiteten Klasse aufzurufen.

%Vor%

Ich verstehe woanders dass man eine Basisfunktion normalerweise nicht "anti-virtuell" wie diese aufrufen kann. Die offensichtliche Ausnahme ist das allgemeine Paradigma:

%Vor%

Da der Ausdruck Base::bar() innerhalb der Methoden von Derived als "anti-virtual" (in dem Sinne, auf den ich anspiele) erkannt wird, ist es möglich, von innerhalb Base::bar() in der gewünschten Weise zu binden / em> eine der Methoden von Derived? Z.B. etwas wie:

%Vor%

Wenn ja, wie lautet die Syntax?

    
OldPeculier 18.01.2013, 21:40
quelle

1 Antwort

14

Nun, &Base::foo ist ein Mitgliedsfunktionszeiger. Und es gibt keine Möglichkeit, einen Memberfunktionszeiger zu verwenden, der keine virtuelle Überschreibung aufruft. Die einzige Syntax, die virtuelle Überschreibungen vermeidet, ist diejenige, bei der Klassenname, Funktionsname und Argumentliste alle denselben Ausdruck haben.

Aber wenn Sie std::bind haben, haben Sie wahrscheinlich auch Lambdas, also könnten Sie vielleicht verwenden:

%Vor%     
aschepler 18.01.2013, 21:53
quelle