more reliable add_optional/positional/category (allow narrowing etc)

master
Daniel Kolesa 2017-05-16 01:32:18 +02:00
parent a368311e12
commit 65087c8e36
2 changed files with 9 additions and 9 deletions

View File

@ -148,23 +148,23 @@ int main(int argc, char **argv) {
auto &help = ap.add_help("print this message and exit");
ap.add_optional('\0', "no-examples", ostd::arg_value::NONE)
ap.add_optional(0, "no-examples", ostd::arg_value::NONE)
.help("do not build examples")
.action(ostd::arg_store_false(build_examples));
ap.add_optional('\0', "no-test-suite", ostd::arg_value::NONE)
ap.add_optional(0, "no-test-suite", ostd::arg_value::NONE)
.help("do not build test suite")
.action(ostd::arg_store_false(build_testsuite));
ap.add_optional('\0', "no-static", ostd::arg_value::NONE)
ap.add_optional(0, "no-static", ostd::arg_value::NONE)
.help("do not build static libostd")
.action(ostd::arg_store_false(build_static));
ap.add_optional('\0', "shared", ostd::arg_value::NONE)
ap.add_optional(0, "shared", ostd::arg_value::NONE)
.help("build shared libostd")
.action(ostd::arg_store_true(build_shared));
ap.add_optional('\0', "config", ostd::arg_value::REQUIRED)
ap.add_optional(0, "config", ostd::arg_value::REQUIRED)
.help("build configuration (debug/release)")
.action(ostd::arg_store_str(build_cfg));
@ -172,7 +172,7 @@ int main(int argc, char **argv) {
.help("print entire commands")
.action(ostd::arg_store_true(verbose));
ap.add_optional('\0', "clean", ostd::arg_value::NONE)
ap.add_optional(0, "clean", ostd::arg_value::NONE)
.help("remove generated files and exit")
.action(ostd::arg_store_true(clean));

View File

@ -250,19 +250,19 @@ struct arg_parser {
template<typename ...A>
arg_optional &add_optional(A &&...args) {
arg_description *p = new arg_optional{std::forward<A>(args)...};
arg_description *p = new arg_optional(std::forward<A>(args)...);
return static_cast<arg_optional &>(*p_opts.emplace_back(p));
}
template<typename ...A>
arg_positional &add_positional(A &&...args) {
arg_description *p = new arg_positional{std::forward<A>(args)...};
arg_description *p = new arg_positional(std::forward<A>(args)...);
return static_cast<arg_positional &>(*p_opts.emplace_back(p));
}
template<typename ...A>
arg_category &add_category(A &&...args) {
arg_description *p = new arg_category{std::forward<A>(args)...};
arg_description *p = new arg_category(std::forward<A>(args)...);
return static_cast<arg_category &>(*p_opts.emplace_back(p));
}