親クラスのバージョンの仮想およびオーバーライドされた関数の std::function オブジェクトを作成したいです。次の例を参照してください。
#include <iostream>
#include <functional>
class Parent
{
public:
virtual void func1()
{
std::cout << "Parent::func1\n";
}
virtual void func2()
{
std::cout << "Parent::func2\n";
}
};
class Child : public Parent
{
public:
// overrides Parent::func1
virtual void func1()
{
std::cout << "Child::func1, ";
Parent::func1();
}
// overrides Parent::func2
virtual void func2()
{
std::cout << "Child::func2, ";
std::function< void() > parent_func2 = std::bind( &Parent::func2, this );
parent_func2();
}
};
int main()
{
Child child;
child.func1(); // output: Child::func1, Parent::func1
child.func2(); // output: Child::func2, Child::func2, ...
return 0;
}
への呼び出しchild.func1()
は期待どおりに動作しますが、への呼び出しchild.func2()
は無限再帰になり、バインドするつもりだったのではなく、parent_func2()
呼び出しているように見えます。Child::func2()
Parent::func2()
どうすればparent_func2()
本当に電話できるのParent::func2
でしょうか?