c++ - 如何将 std::function 的零个或多个参数用作 std::map 中的值?

标签 c++ lambda stdmap std-function

我有一个 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?
};

对于这种情况还有其他建议吗? 请帮忙。

最佳答案

您始终可以忽略参数

{
    { STATE::ON, [=](double, const std::string &) {return StateOn(); } },
    { STATE::OFF, [=](double val, const std::string &) {return StateOff(val); } },
    { STATE::HIBERNATE, [=](double val, const std::string & data) {return StateHibernate(val, data); } },
    { STATE::RESTART, [=](double val, const std::string &) {return StateRestart(val); } }
}

关于c++ - 如何将 std::function 的零个或多个参数用作 std::map 中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55372757/

相关文章:

c++ - vector 的核心段错误

java - 如何禁用 lambda 上缺少最终修饰符的 checkstyle 警告?

c# - 在 Visual Studio 调试器中查看 Lambda

c++ - Qt - 如何为 QProgressBar 组合 QtConcurrent 和 QThreadPool?

c++ - Windows XP 的版本帮助函数

c++ - Lambda 作为模板参数

c++ - 在 C++ 中子类化 std::pair 和 std::map

c++ - 为什么 std::map.find() 在以下情况下不起作用?

c++ - 检查 std::map 中是否存在 - 计数与查找

c++ - 程序使用 clang++ 编译,但 g++ 耗尽 RAM 并失败