gpt4 book ai didi

c++ - 如何在 boost 程序选项中有一个可选的选项值?

转载 作者:可可西里 更新时间:2023-11-01 15:04:06 25 4
gpt4 key购买 nike

我正在使用 Boost 程序选项,我想提供一个具有三种方式的选项:

  1. 如果没有定义
  2. 如果已定义但没有值
  3. 如果定义了一个值

例如,我有一个程序可以处理诸如 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

关于c++ - 如何在 boost 程序选项中有一个可选的选项值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31921200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com