使用提升程序选项处理 2 级命令的最佳方法
Best way of handling level 2 commands with Boost ProgramOptions
我有兴趣拥有一个在命令行上接受 2 级命令的可执行文件 - 有点像git commit
和git add
在一个 EXE 中是它们自己的独立命令。所以我的问题是:有没有办法用程序选项简化这一点?我知道我可以定义不同的方案,然后根据特定的字符串检查argv[1]
,但我希望有一种更干净的方法。谢谢!
您可以使用位置参数:
#include <boost/program_options.hpp>
#include <iostream>
#include <algorithm>
#include <iterator>
namespace po = boost::program_options;
// A helper function to simplify the main part.
template<class T>
std::ostream& operator<<(std::ostream& os, const std::vector<T>& v)
{
copy(v.begin(), v.end(), std::ostream_iterator<T>(os, " "));
return os;
}
int main(int ac, char* av[])
{
try
{
po::options_description desc("Allowed options");
desc.add_options()
("help", "produce help message")
("command", po::value<std::string>(), "command to execute")
("command_opt", po::value<std::vector<std::string> >(), "command options")
;
po::positional_options_description p;
p.add("command", 1);
p.add("command_opt", -1);
po::variables_map vm;
po::store(po::command_line_parser(ac, av).
options(desc).positional(p).run(), vm);
po::notify(vm);
if (vm.count("help")) {
std::cout << "Usage: options_description [options]n";
std::cout << desc;
return 0;
}
if (vm.count("command"))
{
std::cout << "command: " << vm["command"].as<std::string>() << "n";
}
if (vm.count("command_opt"))
{
std::cout << "command options: " << vm["command_opt"].as<std::vector<std::string> >() << "n";
}
}
catch(std::exception& e)
{
std::cout << e.what() << "n";
return 1;
}
}
但是 AFAIK 您必须自己对哪个选项与哪个其他选项兼容进行逻辑检查,因为提升程序选项中没有依赖系统。
按照此处所述将每个命令选项分组到不同的选项组中可能有助于生成的用法文本。
相关文章:
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 从命令行c++发送文本文件名
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 实现无开销push_back的最佳方法是什么
- 在c代码之间共享数据的最佳方式
- 使用std::source_location报告错误的最佳实践
- 使用QProcess执行命令,并将结果存储在QStringList中
- 数组长度,为什么从命令行获取时不能使用它?
- 派生类销毁的最佳实践是什么
- 如果用户输入无效,如何使用字符串变量-C++重复输入命令
- clang整洁10忽略了我的NOLINT命令
- 在子目录中使用target_sources()命令时用于单元测试(qtest)的项目结构
- 用c++测量APDU命令到Java卡的时间的最佳方法
- 使用提升程序选项处理 2 级命令的最佳方法
- 命令历史系统的最佳方法
- 连接命令行参数的最佳方式
- 这是命令行工具的最佳设计