如何在std::function中存储一个虚拟成员函数?
How to store a virtual member function in 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 { }
}
我想将覆盖的 'doSomething' 函数分配给 'foo::f'。但我不知道如何分配覆盖的 'doSomething' 函数。或者我只是写一些代码来为每个 class?
分配 'doSomething' 函数
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 。
this->f = std::bind(&foo::doSomething, this);
这很好用。通过指针或引用传递对象将允许它调用正确的虚函数。
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 { }
}
我想将覆盖的 'doSomething' 函数分配给 'foo::f'。但我不知道如何分配覆盖的 'doSomething' 函数。或者我只是写一些代码来为每个 class?
分配 'doSomething' 函数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 。
this->f = std::bind(&foo::doSomething, this);
这很好用。通过指针或引用传递对象将允许它调用正确的虚函数。