#include #include #include #include #include #include using argument = argument_parser::builder::argument<>; using argument_parser::parsing_traits::hint_type; auto echo(std::string const& s) -> void { std::cout << s << '\n'; } using namespace argument_parser::parsing_traits; constexpr hint_type vector_purpose_hint = "vector of "; template class parser_trait> { public: static std::vector parse(std::string const& s) { std::vector result; std::stringstream ss(s); for (std::string line; std::getline(ss, line, ',');) { T item = parser_trait::parse(line); result.push_back(item); } return result; } ARGPARSE_TRAIT_FORMAT_HINT = concat< hint_provider<&parser_trait::format_hint>, hint_provider<&comma>, hint_provider<&parser_trait::format_hint> >; ARGPARSE_TRAIT_PURPOSE_HINT = concat< hint_provider<&vector_purpose_hint>, hint_provider<&parser_trait::purpose_hint> >; }; auto main() -> int { argument_parser::v2::parser parser(false); argument::start() .positional("count") .position(0) .help_text("How many times to repeat the action.") .action([](int const& count) { std::cout << "count action configured for " << count << '\n'; }) .build(parser); int captured_value = 0; argument::start() .long_argument("threshold") .help_text("Store the parsed value through a reference.") .reference(captured_value) .build(parser); argument::start() .short_argument("q") .help_text("Store a boolean flag.") .build(parser); // argument::start() // .long_argument("regex") // .help_text("Store a regex value.") // .store>() // .build(parser); argument::start() .short_argument("e") .long_argument("echo") .help_text("Echo the parsed value.") .action(echo) .build(parser); argument::start() .long_argument("vecstr") .short_argument("vs") .action>([](std::vector const& vecstr) { for (auto const& str : vecstr) { std::cout << str << '\n'; } }) .build(parser); parser.handle_arguments({ &argument_parser::conventions::gnu_argument_convention }); return 0; }