在父Ctor中绑定虚函数

时间:2014-07-17 12:36:17

标签: c++ inheritance constructor bind virtual-method

鉴于此代码:

class foo
{
public:
    foo() : _myFunc( bind( &foo::testCall, this ) ){}
    virtual void testCall(){ cout << "foo" << endl; }
    void call(){ _myFunc(); }
private:
    function< void() > _myFunc;
};

class bar: public foo
{
public:
    virtual void testCall(){ cout << "bar" << endl; }
};

void main()
{
    bar test;
    test.call();
}

为什么打印“bar”。我读过this issue并且会认为“foo”会被打印出来。

1 个答案:

答案 0 :(得分:1)

您没有在绑定到成员变量的构造函数中调用虚函数,后者调用该变量(在这种情况下使用动态调度)。

调用代码应为:test.call();

更多信息Boost::Bind and virtual function overloads: why do they work?