#ifndef __PLASP_APP__COMMAND_H #define __PLASP_APP__COMMAND_H #include #include #include //////////////////////////////////////////////////////////////////////////////////////////////////// // // Command // //////////////////////////////////////////////////////////////////////////////////////////////////// template class Command { protected: void addOptionGroupsTo(cxxopts::Options &options) { forEach(m_optionGroups, [&](auto &optionGroup) { optionGroup.addTo(options); }); } void parseOptionGroups(cxxopts::Options &options) { forEach(m_optionGroups, [&](auto &optionGroup) { optionGroup.parse(options); }); } void printHelp(cxxopts::Options &options) { 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 << options.help(optionGroupNames) << std::endl; } std::tuple m_optionGroups; }; //////////////////////////////////////////////////////////////////////////////////////////////////// #endif