man*_*ans 11 c++ boost 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\
Run Code Online (Sandbox Code Playgroud)
如何使用Boost程序选项执行此操作?
Sea*_*ine 18
你可以通过给出value
a default_value
和a 来实现这种效果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;
}
}
Run Code Online (Sandbox Code Playgroud)
运行此示例代码打印:
$ ./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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5245 次 |
最近记录: |