如何在boost程序选项中拥有可选选项值
How to have an optional option value in boost program options?
我正在使用Boost程序选项,我想提供一个有三种方式的选项:
- 如果没有定义
- 如果已定义但没有值
- 如果用值 定义
例如,我有一个程序可以处理一个文件,如a.jpg,我想为用户提供能够在以下场景中使用它的功能:
myapp.exe a.jpg : process jpeg
myapp.exe a.jpg -e : process jpeg and generate report at the same directory as a.jpg
myapp.exe a.jpg -e c:tmp : process jpeg and generate report at c:tmp
我如何用Boost程序选项做到这一点?
您可以通过同时赋予value
一个default_value
和一个implicit_value
来实现此效果。
当根本没有指定该选项时,将使用default_value
。当该选项是特定的而没有值时,将使用implicit_value
。如果指定值,它将覆盖默认值和隐式值。
那么,一些做这个的代码可能看起来像这样:
#include "boost/program_options.hpp"
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char** argv)
{
namespace po = boost::program_options;
po::options_description desc("Options");
desc.add_options()
("process-jpeg,e", po::value<string>()->default_value("")->implicit_value("./"), "Processes a JPEG.");
po::variables_map vm;
try
{
po::store(po::parse_command_line(argc, argv, desc), vm);
po::notify(vm);
} catch (po::error& e) {
cerr << "ERROR: " << e.what() << endl << endl << desc << endl;
return 1;
}
string outputDir = vm["process-jpeg"].as<string>();
if (outputDir.empty()) {
cout << "-e was not provided on the command line" << endl;
} else {
cout << "-e is using directory: " << outputDir << endl;
}
}
运行这个示例代码打印:
$ ./jpg_processor
-e was not provided on the command line
$ ./jpg_processor -e
-e is using directory: ./
$ ./jpg_processor -e c:tmp
-e is using directory: c:tmp
相关文章:
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- Win32编译器选项和内存分配
- 在 c++ 中拥有一组结构的正确方法是什么?
- C/C++预处理器是否可以检测一些编译器选项
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 通过选项卡的文本设置QTabWidget顺序
- 通过ccmake在cmake中缓存依赖选项
- 如何传递多个 std::文件系统选项?
- 基于编译器选项的编译二进制路径
- 我应该如何表示我拥有的连续元素序列?
- "perf_event_attr"结构的"read_format"属性的选项到底是什么?
- 拥有映射的现代方法,该映射可以指向或引用已在堆栈上分配的不同类型的数据
- 现代 C++ 中作为类成员的非拥有指针
- 结构包含在两个头文件中,这两个文件我都不拥有
- 如何应用 libcurl 的持久连接选项
- 在函数中拥有函数原型的目的是什么?
- condition_variable、引用和线程:谁拥有锁?
- 如何在一个功能中拥有所有选项?
- 如何在boost程序选项中拥有可选选项值