如何在std :: function中存储虚拟成员函数?

时间:2016-03-04 04:00:53

标签: c++ c++11 std-function

class foo
{
public:
    foo(void)
    {
        this->f = std::bind(&foo::doSomething, this);
    }

private:
    virtual void doSomething(void) { }

private:
    std::function<void(void)> f;
}

class bar : public foo
{
public:
    bar(void) { /* I have no idea what I have to */ }

private:
    virtual void doSomething(void) override { }
}

我想指定重写&#39; doSomething&#39;功能进入&f; foo :: f&#39;。但我不知道如何分配重写的“doSomething&#39;功能。或者我只是写一些代码来分配&#39; doSomething&#39;每个班级的功能?

class foo
{
public:
    foo(void)
    {
        this->f = std::bind(&foo::doSomething, this);
    }

private:
    virtual void doSomething(void) { }

private:
    std::function<void(void)> f;
}

class bar : public foo
{
public:
    bar(void) 
    {  
        this->f = std::bind(&bar::doSomething, this);
    }

private:
    virtual void doSomething(void) override { }
}

该代码是我对我的问题的回答。但我想我可以自动将虚函数分配给std :: function。

1 个答案:

答案 0 :(得分:6)

this->f = std::bind(&foo::doSomething, this);

这很好用。通过指针或引用传递对象将允许它调用正确的虚函数。