为什么我们需要引用对象来访问成员函数的指针?

问题描述 投票:0回答:1
class Harl {
    private:
        void debug( void );
        void info( void );
        void warning( void );
        void error( void );
    public:
        void complain( std::string level );
};
void Harl::complain( std::string level )
{
    int i;
    std::string levels[4];
    void (Harl::*d_ptr)() = &Harl::debug;
    void (Harl::*i_ptr)() = &Harl::info;
    void (Harl::*w_ptr)() = &Harl::warning;
    void (Harl::*e_ptr)() = &Harl::error;

    levels[0] = "DEBUG";
    levels[1] = "INFO";
    levels[2] = "WARNING";
    levels[3] = "ERROR";
    void (Harl::*p_levels[4])();

    p_levels[0] = d_ptr;
    p_levels[1] = i_ptr;
    p_levels[2] = w_ptr;
    p_levels[3] = e_ptr;
    for (i = 0; i < 4; i++) {
        if (level == levels[i])
            break;
    }
    (this->*(p_levels[i]))();
}
int main()
{
    Harl harl1;
    Harl harl2;
    Harl harl3;
    Harl harl4;

    harl4.complain("ERROR");
    harl1.complain("WARNING");
    harl2.complain("DEBUG");
    harl3.complain("INFO");
}

我已经从主函数中的对象调用该函数,当我需要调用成员函数时,我只需像这样调用该函数:

debug();

但是要从指向成员函数的指针调用成员函数,我需要使用此指针指定对象。为什么?

我试过了:

*(p_levels[i]))()

我希望程序知道我在哪个对象中,因为我正在从该对象调用抱怨函数。

c++ oop pointer-to-member
1个回答
0
投票

我希望程序知道我在哪个对象中,因为我正在从该对象调用抱怨函数。

您可以将指向成员函数的指针视为指向具有额外参数的自由函数的指针。例如。指向类

void foo(int)
的成员函数
Bar
的指针可以被视为具有以下签名
void foo(Bar*, int)
的自由函数。

© www.soinside.com 2019 - 2024. All rights reserved.