argv クラス
が欲しいが、じゃぁ、具体的には?と考えるとあいまいだ。
boost::program_options はちょっとちがうような気がする。
int main(int argc, char* argv[]) { Nevil::LaunchArguments args(argc, argv); /* LaunchArguments は trivial container なので標準アルゴリズムが使える */ return EXIT_SUCCESS; }
っていう感じでどうか?標準アルゴリズムが使えた所でどーよっていうのはあるな。
これなら boost::range で一撃か?
プロセスをクラス化して押し込めてもいいんだけどやること変わりないしなー。
int main(int argc, char* argv[]) { static const LaunchArguments::Spec spec[] = { {"help", 'h', ""}, {"verbose", 'v', "2"}, {"config", 'c', "default.conf"} }; using namespace Navil; LaunchArguments args(argc, argv, spec); Variant<int, std::string, bool> opt; /* とりあえず形は3つで */ opt = args["help"]; if (opt) { usage(); return; } opt = args["verbose"]; if (opt) { verbose_ = Get<int>(opt); } opt = args["config"]; if (opt) { configPath_ = Get<string>(opt); } return EXIT_SUCCESS; }
うーん、いまいち。