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

问题描述 投票:0回答:1

是否可以从重写的虚函数中调用成员函数?编译器告诉我成员函数没有地址(l值是一元'&'操作数)。我想做类似的事情:

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)等),因为它不认为它是l值(即,它没有地址)。我认为原因是虚函数在运行时评估,并且该成员指针必须在编译时评估。然后,还有其他选择吗?

谢谢!

c++ pointers virtual member
1个回答
2
投票

错误消息已经很好地提示了这里出了什么问题:

<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 () !!!
© www.soinside.com 2019 - 2024. All rights reserved.