std::bind() を使用して、派生クラスのバージョンを呼び出すのではなく、仮想関数の基本クラス バージョンを呼び出す関数を作成しようとしています。
struct Base
{
virtual void foo() { cout << "Base\n"; }
};
struct Derived : public Base
{
virtual void foo() { cout << "Derived\n"; }
};
int main(int argc, const char * argv[])
{
Base* base = new Derived;
auto baseMethodHopefully = std::bind( &Base::foo, base );
baseMethodHopefully(); // Want call to Base::foo(), but get call to Derived::foo().
return 0;
}
通常、このような「反仮想」の方法で基本関数を呼び出すことはできないことを他の場所から理解しています。明らかな例外は、一般的なパラダイムです。
void Derived::bar() { Base::bar(); }
式Base::bar()
は Derived のメソッド内で (私が言及している意味で) "anti-virtual" として認識されるため、Derived のメソッドの 1 つから目的の方法でバインドすることは可能ですBase::bar()
か? 例:
void Derived::bar()
{
auto baseMethod = std::bind( &Base::foo, this );
baseMethod();
}
もしそうなら、構文は何ですか?