#ifndef __PLASP_APP__COMMAND_H #define __PLASP_APP__COMMAND_H #include #include #include #include //////////////////////////////////////////////////////////////////////////////////////////////////// // // Command // //////////////////////////////////////////////////////////////////////////////////////////////////// template class Command { public: void printHelp() { const auto numberOfOptionGroups = std::tuple_size>(); std::vector optionGroupNames; optionGroupNames.reserve(numberOfOptionGroups + 1); optionGroupNames.emplace_back(""); forEach(m_optionGroups, [&](auto &optionGroup) { optionGroupNames.emplace_back(optionGroup.Name); }); std::cout << m_options.help(optionGroupNames) << std::endl; } protected: Command() : m_options(std::string("plasp ") + Derived::Name, std::string(Derived::Description) + ".") { forEach(m_optionGroups, [&](auto &optionGroup) { optionGroup.addTo(m_options); }); } void parseOptions(int argc, char **argv) { const auto parseResult = m_options.parse(argc, argv); forEach(m_optionGroups, [&](auto &optionGroup) { optionGroup.read(parseResult); }); } static void printVersion() { std::cout << Version << std::endl; } cxxopts::Options m_options; std::tuple m_optionGroups; }; //////////////////////////////////////////////////////////////////////////////////////////////////// #endif