如何将“void (Args args)”转换为“std::function<void (Args)>”

时间:2021-07-10 17:36:24

标签: c++ function command-line-interface

错误:<script> MonthYear.innerText = "25/3"; </script>

所以我正在编写一个命令行界面 (cli),并且有一个可以通过 cli 访问的命令列表(向量)。它是这样实现的:

no suitable constructor exists to convert from "void (Args args)" to "std::function<void (Args)>"

对于上下文,这是代码的相关部分。

标题:

using Args = std::vector<std::string>;
using Func = std::function<void(Args)>;
using Command = std::tuple<std::string, std::string, Func>;

std::vector<Command> commands;

来源:

using Args = std::vector<std::string>;
using Func = std::function<void(Args)>;
using Command = std::tuple<std::string, std::string, Func>;

class Cli{
  public:
    Cli();
    void add_to_commands(std::string, std::string, Func);

  private:
    std::vector<Command> commands;

    void exit_program(Args args);
    void help(Args args);
};

错误 (Cli::Cli(){ add_to_commands("exit", "Exit Program", Cli::exit_program); add_to_commands("help, h", "Help Screen", Cli::help); } void Cli::add_to_commands(std::string names, std::string desc, Func func) { Command cmd = std::make_tuple(names, desc, func); commands.push_back(cmd); } ) 在构造函数中,我尝试在其中传递函数。

由于 c++ 无法转换它,我认为基本思想有问题。最好更改 no suitable constructor exists to convert from "void (Args args)" to "std::function<void (Args)>" 的实现,因此可以像我在构造函数中尝试的那样使用方法 Func

0 个答案:

没有答案