可以 Boost Program_options 分隔逗号分隔的参数值

2023-12-30

如果我的命令行是:

> prog --mylist=a,b,c

Boost 的program_options 可以设置为查看三个不同的参数值吗mylist争论?我已将program_options配置为:

namespace po = boost::program_options;
po::options_description opts("blah")

opts.add_options()
    ("mylist", std::vector<std::string>>()->multitoken, "description");

po::variables_map vm;
po::store(po::parse_command_line(argc, argv, opts), vm);
po::notify(vm);

当我检查的值mylist论点,我认为一个值是a,b,c。我想看到三个不同的值,以逗号分隔。如果我将命令行指定为:

> prog --mylist=a b c

or

> prog --mylist=a --mylist=b --mylist=c

有没有办法配置program_options以便它看到a,b,c作为三个值,每个值都应该插入到向量中,而不是一个?

我正在使用 boost 1.41、g++ 4.5.0 20100520,并启用了 c++0x 实验扩展。

EDIT:

在我看来,公认的解决方案有效,但最终变得更加复杂,而不仅仅是迭代向量并手动分割值。最后,我接受了 James McNellis 的建议并按照这种方式实施了。然而,他的解决方案没有作为答案提交,所以我接受了 hkaiser 的另一个正确解决方案。两者都有效,但手动标记化更清晰。


您可以为您的选项注册一个自定义验证器:

namespace po = boost::program_options;

struct mylist_option 
{
    // values specified with --mylist will be stored here
    vector<std::string> values;

    // Function which validates additional tokens from command line.
    static void
    validate(boost::any &v, std::vector<std::string> const &tokens)
    {
        if (v.empty())
            v = boost::any(mylist_option());

        mylist_option *p = boost::any_cast<mylist_option>(&v);
        BOOST_ASSERT(p);

        boost::char_separator<char> sep(",");
        BOOST_FOREACH(std::string const& t, tokens)
        {
            if (t.find(",")) {
                // tokenize values and push them back onto p->values
                boost::tokenizer<boost::char_separator<char> > tok(t, sep);
                std::copy(tok.begin(), tok.end(), 
                    std::back_inserter(p->values));
            }
            else {
                // store value as is
                p->values.push_back(t);
            }
        }
    }
};

然后可以用作:

opts.add_options()                 
    ("mylist", po::value<mylist_option>()->multitoken(), "description");

and:

if (vm.count("mylist"))
{
    // vm["mylist"].as<mylist_option>().values will hold the value specified
    // using --mylist
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

可以 Boost Program_options 分隔逗号分隔的参数值 的相关文章

随机推荐

  • Visual Studio (MASM) 程序集 - 为什么即使未调用标签,标签中的代码也会自动执行

    所以我有这段代码并且两个标签都正在执行 即使我的印象是它们只有在使用 a 调用时才会执行jmp操作说明 换句话说 这段代码的输出是15 i e 5 7 3 虽然我认为应该是5 因为标签不是通过 jmp 指令调用的 data code Tes
  • JavaScript 配置函数放在哪里?

    对于在文件中包含 javascript 代码而不是将其包含在脚本标记中 开发人员的一般看法是什么 所以我们都同意 jquery 需要包含在脚本文件中 如下所示 我的问题是 为了获得不在网站所有页面上的页面上的功能 我们是否将下面的函数包含在
  • DDD:在另一个 AR 中创建一个聚合根

    假设我的域中有 2 个聚合根 AR 并且调用第一个聚合根的某个方法需要访问第二个聚合根的实例 在 DDD 中 第二个 AR 的检索和创建应该如何以及在哪里进行 这是一个人为的例子TravelerEntity需要访问SuitcaseEntit
  • 如何使用游标更新记录

    我正在使用下面的查询来更新我的所有记录 但它从第二行开始更新 我如何修改它以从第一行开始进行更改 我在用微软SQL 2008 我想我不能使用 FETCH STATUS作为第一行 因为它是全局的 提前致谢 use vivdb DECLARE
  • yii2 ActiveRecord findBySql - 响应内容不能是数组错误

    Yii2 的新手细微差别 只是试图从 ActiveRecord 查询中获取返回 我意识到使用 Yii2 约定可能有一种更简单的方法来做到这一点 public function actionGet permissions sql select
  • Android:如何对齐底部的按钮和上面的列表视图?

    我想在列表视图的底部有一个按钮 如果我使用relativeLayout FrameLayout 它会对齐 但listView会下降到非常底部 在底部按钮后面 框架布局
  • UML 序列图 - 可视化数据验证

    方法对一些传递的数据连续执行验证检查 如果验证检查失败 将立即抛出异常并中止该方法 如何使用 UML 序列图可视化此流程 是否可以 允许在序列图中显示异常 一个可能的解决方案可能是使用嵌套替代方案 UML 不提供特定于模型异常的内容 看着h
  • 数组的排列

    例如我有这个数组 int a new int 3 4 6 2 1 我需要所有排列的列表 如果其中一个是这样的 3 2 1 4 6 其他的一定不一样 我知道如果数组的长度是n那么有n 可能的组合 这个算法怎么写呢 更新 谢谢 但我需要一个伪代
  • 我们如何下载 chromedriver 117?

    我的 Chrome 浏览器已更新至版本 117 现在我需要下载 chromedriver 117 来运行自动化脚本 任何人都可以为此提供解决方案吗 如果我们使用 Chrome 版本 115 或更高版本 我们需要检查Chrome 测试可用性仪
  • 我的密码curl有时会失败?

    ch curl init curl setopt ch CURLOPT URL PathUrl curl setopt ch CURLOPT USERPWD someuser somepass curl setopt ch CURLOPT
  • 如何在R中返回每个组的nrow?

    这可能是一个非常基本的问题 我有一个简单的数据框 每个课程都有不同的观察结果 我希望 R 返回每个课程的行数 在我的例子中等于观察数 例如 DF lt structure list age c 36 21 20 32 24 course c
  • 解构 Clojure 函数的参数,同时保留原始值。

    您可以解构函数参数但仍然可以使用原始参数吗 我现在做的方法就是使用letform 在函数体内 但我想知道是否有更简洁的方法来做到这一点 似乎 as也适用于函数 with vector defn test x y as v x x y y v
  • facebook sdk php 示例不起作用

    我正在尝试为网站开发 facebook 登录 我尝试了给出的示例php facebook sdk即使在登录 Facebook 后 user variable即使在 Facebook 登录后仍然为 0 它没有显示注销 url 调用 faceb
  • 来自 Symfony Command 的 Swift 邮件

    我尝试使用 Symfony 命令从命令行发送 Swift 邮件 虽然我得到以下异常 Fatal error Call to undefined method Symfony Bundle TwigBundle Debug TimedTwig
  • SendMessage - 发送区分大小写的按键

    我正在尝试使用 WinAPI 创建一个工作函数 以便在其他应用程序 例如记事本 中逐键写入给定的文本SendMessage功能 我有这样的代码 SendMessage handle WM CHAR 0x41 0 SendMessage ha
  • React Native foreach 循环

    我正在 React Native 中开发一个小应用程序 我正在寻找类似 foreach 函数的东西 我只是找不到 foreach 循环 不在 StackOverflow 上 甚至不在docs https facebook github io
  • OAuth2 中 OTP/2FA 支持的推荐设计

    我正在尝试将 OTP 2FA 支持添加到 OAuth2 中 但是经过大量阅读RFC6749 https www rfc editor org rfc rfc6749 目前还不清楚如何在不违反规范的情况下干净地添加 OTP 2FA 虽然 OT
  • iPhone 的缓存/离线地图?

    我想在我的应用程序中使用地图 以便尽可能减少流量 完美的解决方案是缓存地图切片 我知道谷歌地图 许可证 是不可能的 我查看了 OpenStreetMaps 这似乎是一个很好的解决方案 下一个 SDK 我发现的唯一一个来自 CloudMade
  • 使用 Rails 中的模型数据填充选择

    我觉得有必要为问这样一个简单的问题而道歉 但我对 Rails 指南越来越感到沮丧 我确信他们回答了我的问题 但他们没有提供足够的背景让我真正理解如何apply他们给我什么 谷歌也没有多大帮助 尽管我可能只是搜索了错误的术语 短语 鉴于该免责
  • 可以 Boost Program_options 分隔逗号分隔的参数值

    如果我的命令行是 gt prog mylist a b c Boost 的program options 可以设置为查看三个不同的参数值吗mylist争论 我已将program options配置为 namespace po boost p