Почему нам нужно ссылаться на объект, чтобы получить доступ к указателю на функцию-член?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему нам нужно ссылаться на объект, чтобы получить доступ к указателю на функцию-член?

Сообщение Anonymous »

Код: Выделить всё

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]))()
Я ожидаю, что программа будет знать, в каком объекте я нахожусь, потому что я вызываю функцию жалобы из этого объекта.

Подробнее здесь: https://stackoverflow.com/questions/791 ... r-function
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»