diff --git a/src/V3OptionParser.cpp b/src/V3OptionParser.cpp index b1855c462..e0d7fbd04 100644 --- a/src/V3OptionParser.cpp +++ b/src/V3OptionParser.cpp @@ -114,16 +114,33 @@ V3OPTION_PARSER_DEF_ACT_CB_CLASS(ActionCbCall, void(void), m_cb(), en::NONE); V3OPTION_PARSER_DEF_ACT_CB_CLASS(ActionCbFOnOff, void(bool), m_cb(!hasPrefixFNo(optp)), en::FONOFF); V3OPTION_PARSER_DEF_ACT_CB_CLASS(ActionCbOnOff, void(bool), m_cb(!hasPrefixNo(optp)), en::ONOFF); -template <> -V3OPTION_PARSER_DEF_ACT_CB_CLASS(ActionCbVal, void(int), m_cb(std::atoi(argp)), en::VALUE); -template <> -V3OPTION_PARSER_DEF_ACT_CB_CLASS(ActionCbVal, void(const char*), m_cb(argp), - en::VALUE); V3OPTION_PARSER_DEF_ACT_CB_CLASS(ActionCbPartialMatch, void(const char*), m_cb(optp), en::NONE, true); V3OPTION_PARSER_DEF_ACT_CB_CLASS(ActionCbPartialMatchVal, void(const char*, const char*), m_cb(optp, argp), en::VALUE, true); +template <> +class V3OptionParser::Impl::ActionCbVal final : public ActionBase { + std::function m_cb; + +public: + using CbType = std::function; + explicit ActionCbVal(CbType cb) + : m_cb(std::move(cb)) {} + void exec(const char* optp, const char* argp) override { m_cb(std::atoi(argp)); } +}; + +template <> +class V3OptionParser::Impl::ActionCbVal final : public ActionBase { + std::function m_cb; + +public: + using CbType = std::function; + explicit ActionCbVal(CbType cb) + : m_cb(std::move(cb)) {} + void exec(const char* optp, const char* argp) override { m_cb(argp); } +}; + #undef V3OPTION_PARSER_DEF_ACT_CB_CLASS //######################################################################