gpt4 book ai didi

c++ - 如何正确使用 boost::program_options::implicit_value 作为字符串 vector ?

转载 作者:太空宇宙 更新时间:2023-11-04 13:25:44 26 4
gpt4 key购买 nike

代码证明:

boost::program_options::options_description options;

Parser::Parser(): options("Allowed options")
{
options.add_options()
("help,h", "produce help message")
("type,t", po::value<std::string>()->required()->implicit_value(""), "Type")
}

这一行没问题:

("type,t", po::value<std::string>()->required()->implicit_value(""), "Type")

如何添加此行才能正常工作?:

("file,f", po::value< std::vector<std::string> >()->required()->multitoken()->implicit_value(std::vector<std::string>(0,"")), "File(s)")

这里是字符串-s的 vector 。

最佳答案

你只需要帮助选项描述就知道如何向最终用户呈现默认值。

也就是通常implicit_value会用 lexical_cast<>获取文本表示,但这(显然)不适用于 vector<string> .因此,提供您自己的文本表示:

("file,f", po::value<strings>()->required()
->implicit_value(strings { "santa", "claus" }, "santa,claus"), "File(s)");

完整演示

Live On Coliru

#include <iostream>
#include <boost/program_options.hpp>

namespace po = boost::program_options;

int main(int argc, char** argv) {
po::options_description options/*("Allowed options")*/;

using strings = std::vector<std::string>;

options.add_options()
("help,h", "produce help message")
("file,f", po::value<strings>()->required()->implicit_value(strings { "santa", "claus" }, "santa,claus"), "File(s)");

std::cout << options << "\n";

po::variables_map vm;
po::store(po::parse_command_line(argc, argv, options, po::command_line_style::default_style), vm);
po::notify(vm);

auto types = vm["file"].as<strings>();
for (auto t : types)
std::cout << "Got: " << t << "\n";
}

打印:

  -h [ --help ]                      produce help message
-f [ --file ] [=arg(=santa,claus)] File(s)

Got: santa
Got: claus

关于c++ - 如何正确使用 boost::program_options::implicit_value 作为字符串 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33453573/

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