Код: Выделить всё
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
Мобильная версия