c++ - 使用 Boost::program_options 允许多次出现自定义类型

标签 c++ boost boost-program-options

有什么方法可以允许在 boost::program_options 中多次出现自定义类型 (struct)?我发现指定这可以使用 std::vector 完成的各种来源,但我想使用自定义数据类型来实现相同的目的。然而,这个结构确实包含一个 std::vector,我想在其中存储数据。

最佳答案

代码示例真的会有很大帮助。

但是,既然您的结构将包含 vector ,为什么不绑定(bind)那个 vector 呢?

简单的例子:

Live On Coliru

#include <boost/program_options.hpp>
#include <boost/program_options/variables_map.hpp>
#include <boost/program_options/cmdline.hpp>
#include <iostream>
#include <vector>

struct my_custom_type {
    std::vector<std::string> values;

    friend std::ostream& operator<<(std::ostream& os, my_custom_type const& mct) {
        std::copy(mct.values.begin(), mct.values.end(), std::ostream_iterator<std::string>(os << "{ ", ", "));
        return os << "}";
    };
};

int main(int argc, char** argv) {
    namespace po = boost::program_options;

    my_custom_type parse_into;

    po::options_description desc;
    desc.add_options()
        ("item", po::value<std::vector<std::string> >(&parse_into.values), "One or more items to be parsed")
        ;

    try {
        po::variables_map vm;
        po::store(po::parse_command_line(argc, argv, desc, po::command_line_style::default_style), vm);
        vm.notify();

        std::cout << "Parsed custom struct: " << parse_into << "\n";
    } catch(std::exception const& e) {
        std::cerr << "Error: " << e.what() << "\n";
    }
}

当使用 26 个参数调用时,如 ./test --item={a..z} 它打印:

Parsed custom struct: { a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, }

如果您想“自动”以“特殊”方式处理转化,您可以查看

关于c++ - 使用 Boost::program_options 允许多次出现自定义类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32723726/

相关文章:

c++ - 需要 std::vector 优化

c++ - 我是否应该将永远不会更改的参数声明为 const 变量?

c++ - 使用 Visual Studio 2015 x64 和 CMake 构建 TBB

c++ - 如果不是json,但类似,如何使用boost解析?

boost::program_options :当属于命名空间时如何声明和验证我自己的选项类型?

c++ - 在 C++ 中执行 WHIRLPOOL 散列

c++ - 在 boost::spirit mini_c 中实现 "NOT"

c++ - 是否可以在 C++ 中新创建的线程中加入子线程?

c++ - boost program options 一个选项的多个值

c++ - 使用 boost::program_options 解析配置文件