#include "Harl.hpp" #include typedef void (Harl::*HarlComplaint)(void); int getLevelIdx(std::string level) { static const std::string levels[] = { "debug", "info", "warning", "error", }; for (int i = 0; i < 4; i++) { if (level == levels[i]) return i; } return -1; } void Harl::complain(std::string level) { static const HarlComplaint dispatcher[] = { &Harl::debug, &Harl::info, &Harl::warning, &Harl::error, }; int idx = getLevelIdx(level); if (idx < 0 || idx > 3) wrongLevel(); else { HarlComplaint complaint = dispatcher[idx]; (this->*complaint)(); } } void Harl::debug() { std::cout << "I love having extra bacon for my " "7XL-double-cheese-triple-pickle-special-ketchup burger. I really do!" << std::endl; } void Harl::info() { std::cout << "I cannot believe adding extra bacon costs more money. You didn’t put " "enough bacon in my burger! If you did, I wouldn’t be asking for more!" << std::endl; } void Harl::warning() { std::cout << "I think I deserve to have some extra bacon for free. I’ve been " "coming for years, whereas you started working here just last month." << std::endl; } void Harl::error() { std::cout << "This is unacceptable! I want to speak to the manager now." << std::endl; } void Harl::wrongLevel() { std::cout << "Wait, I'm confused..." << std::endl; }