У меня есть класс Engine, который имеет член типа std :: map, который отображает перечисление на функции-члены.
Я могу отобразить перечисление для всех функций, если число аргументов функций одинаково.
enum STATE { OFF, ON, HIBERNATE, RESTART };
enum RETCODE { SUCCESS, FAIL, UNKNOWN, OUTOFBOUND };
class Engine
{
Engine();
RETCODE StateOn(double val);
RETCODE StateOff(double val);
RETCODE StateHibernate(double val);
RETCODE StateRestart(double val);
private:
const std::map<STATE, std::function<RETCODE(double)>> Map_State_FnPtr;
};
Engine::Engine() : Map_State_FnPtr {
{ STATE::ON, [=](double val) {return StateOn(val); } },
{ STATE::OFF, [=](double val) {return StateOff(val); } },
{ STATE::HIBERNATE, [=](double val) {return StateHibernate(val); } },
{ STATE::RESTART, [=](double val) {return StateRestart(val); } }
}
{
// c'tor body
}
Но у меня есть сценарий, в котором некоторые функции могут иметь ноль или несколько аргументов.
Как мне объявить и построить переменную карты в таком сценарии?
class Engine
{
Engine();
RETCODE StateOn(); // No arguments
RETCODE StateOff(double val); // 1 argument
RETCODE StateHibernate(double val, const std::string & data); // Multiple arguments
RETCODE StateRestart(double val);
private:
const std::unordered_map<STATE, std::function<RETCODE()>> Map_State_FnPtr; // What should be the declaration?
};
Есть ли другие предложения по этому сценарию?
Пожалуйста, помогите.