指向虚函数中成员函数的指针

Pointer to member function in virtual function

是否可以从覆盖的虚函数中调用成员函数?编译器告诉我成员函数没有地址(lvalue required as unary '&' operand)。我想做类似的事情:

class Virtual
{
public:
    virtual void f() = 0;
};

class Real : public Virtual
{
public:
    void f() override { g(&Real::h()); }

private:
    void g(bool (Real::*p)() );
    bool h();
};

但是,在 f() 内部,任何成员指针语句都是无效的(&Real::h()std::mem_fn(&Real::h())std::function<bool<void>(h) 等),因为它不认为它是左值(即,它没有地址)。我认为原因是虚函数是在 运行 时求值的,而这个成员指针必须在编译时求值。那么,还有什么办法吗?

谢谢!

错误消息已经很好地提示了这里的错误:

<source>:10:27: error: cannot take the address of an rvalue of type 'bool'
    void f() override { g(&Real::h()); }
                          ^~~~~~~~~~

Real::h()bool。获取指向成员函数的指针的正确语法是

    void f() override { g(&Real::h); } 
                           //     ^  -------- no () !!!