使用Boost向量和字符串的奇怪boost_program_options问题

范伯伦登克

使用Boost.Program_options,我的代码如下:

namespace po = boost::program_options;
namespace ct = boost::container;

并在特定功能中:

Options opts;
ct::string fname;
ct::vector<ct::string> others;

{   po::options_description general("General");
    general.add_options()
        ("version,v", "Print version information")
        ("help,h", "Show help message")
        ("verbosity,V", po::value(&opts.verbosity)->default_value(0)->value_name("level"), "Runtime noise")
        ("main-is,m", po::value(&fname)->default_value("Main.pbc")->value_name("fname"), "Program filename")
        /* error */ ("sideload,l", po::value<ct::vector<ct::string> >(&others)->multitoken(), "Other modules")
        ;

    po::options_description performance("Performance");
    performance.add_options()
        // ... code removed here ...
        ;

    po::positional_options_description modules;
    modules.add("main-is", 1).add("sideload", -1);

    po::options_description cmdline;
    cmdline.add(general).add(performance);

    po::variables_map vm;
    try {
        po::store(po::command_line_parser(argc, argv).options(cmdline).positional(modules).run(), vm);
        po::notify(vm);
    }
    catch (const std::exception &e) {
        std::cout << e.what() << std::endl;
        return EXIT_FAILURE;
    }

    if (vm.count("help") || argc == 1) {
        version();
        std::cout << std::endl << "USAGE: " << argv[0] << " [options] MAIN.pbc [sideload modules ...]" << std::endl;
        std::cout << cmdline << std::endl;
        return EXIT_SUCCESS;
    }

    if (vm.count("version")) {
        version();
        return EXIT_SUCCESS;
    }
}

我收到如下错误:

In file included from /Users/kvanb/git/panthera/panthera/src/main.cpp:7:
In file included from /usr/local/include/boost/program_options/options_description.hpp:13:
In file included from /usr/local/include/boost/program_options/value_semantic.hpp:14:
/usr/local/include/boost/lexical_cast.hpp:388:13: error: static_assert failed "Target type is
      neither std::istream`able nor std::wistream`able"
  ...BOOST_STATIC_ASSERT_MSG((result_t::value || boost::has_right_shift<std::basic_istream<wchar_t>, T >::value), 
     ^                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

如果我注释掉我/* error */上面注释的行,它将消失。

我尝试使用std::vectorstd::string,但是错误仍然相同。

有想法吗?

看到

Porgram选项显然不支持Boost容器的boost::container::vector多值选项类型。

您可以使用std::vector<ct::string>,或找其性状专门支持ct::vector以及

例如,boost/program_options/detail/value_semantic.hpp您需要为添加重载boost::container::vector

/** Validates sequences. Allows multiple values per option occurrence
    and multiple occurrences. */
template<class T, class charT>
void validate(boost::any& v, 
              const std::vector<std::basic_string<charT> >& s, 
              boost::conatainer::vector<T>*, // HERE!
              int)

老实说,您可以看到他们甚至不支持std::vector自定义分配器。我认为开发人员不会急于实现这一目标。实现非常复杂(对重载进行了调整,以允许编译器无法正确进行模板实例化的部分排序)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

CMake在Debian上找不到boost_program_options

来自分类Dev

如何使用Boost连接C ++中的字符串向量?

来自分类Dev

使用Boost Spirit提取无界的字符串和整数

来自分类Dev

使用$和grep的奇怪的字符串匹配问题

来自分类Dev

c++ boost进程间交换(复制)非共享和共享字符串向量

来自分类Dev

boost :: program_options和位置参数的问题

来自分类Dev

boost :: program_options和位置参数的问题

来自分类Dev

RAII与boost boost :: program_options和options_description

来自分类Dev

RAII与boost boost :: program_options和options_description

来自分类Dev

boost :: mpl :: map的类型和字符字符串

来自分类Dev

用boost :: algorithms :: join提取和连接字符串

来自分类Dev

boost :: multiprecision和rocksdb :: Slice字符串交互C ++

来自分类Dev

使用boost program_options失败,并出现奇怪的编译错误

来自分类Dev

Boost Program_Options 如何处理数组向量?

来自分类Dev

如何使用Boost预处理程序扩展字符串

来自分类Dev

使用Boost Spirit Qi解析包含文字的字符串

来自分类Dev

使用boost metaparse字符串解析包含的文件

来自分类Dev

如何使用Boost预处理程序扩展字符串

来自分类Dev

从Boost Spirit X3解析器返回的向量中的空字符串

来自分类Dev

从Boost Spirit X3解析器返回的向量中的空字符串

来自分类Dev

带字符串顶点的Boost图

来自分类Dev

Boost :: any分配字符串值

来自分类Dev

Boost序列化字符串*

来自分类Dev

Boost :: any分配字符串值

来自分类Dev

奇怪的字符串操作问题

来自分类Dev

使用std :: find对照字符串向量检查字符串的问题

来自分类Dev

是否可以在Windows控制台中使用Boost和STL打印UTF-8字符串?

来自分类Dev

在Windows中使用boost :: program_options从命令行参数读取Unicode字符

来自分类Dev

映射字符串和向量,如何使用查找

Related 相关文章

  1. 1

    CMake在Debian上找不到boost_program_options

  2. 2

    如何使用Boost连接C ++中的字符串向量?

  3. 3

    使用Boost Spirit提取无界的字符串和整数

  4. 4

    使用$和grep的奇怪的字符串匹配问题

  5. 5

    c++ boost进程间交换(复制)非共享和共享字符串向量

  6. 6

    boost :: program_options和位置参数的问题

  7. 7

    boost :: program_options和位置参数的问题

  8. 8

    RAII与boost boost :: program_options和options_description

  9. 9

    RAII与boost boost :: program_options和options_description

  10. 10

    boost :: mpl :: map的类型和字符字符串

  11. 11

    用boost :: algorithms :: join提取和连接字符串

  12. 12

    boost :: multiprecision和rocksdb :: Slice字符串交互C ++

  13. 13

    使用boost program_options失败,并出现奇怪的编译错误

  14. 14

    Boost Program_Options 如何处理数组向量?

  15. 15

    如何使用Boost预处理程序扩展字符串

  16. 16

    使用Boost Spirit Qi解析包含文字的字符串

  17. 17

    使用boost metaparse字符串解析包含的文件

  18. 18

    如何使用Boost预处理程序扩展字符串

  19. 19

    从Boost Spirit X3解析器返回的向量中的空字符串

  20. 20

    从Boost Spirit X3解析器返回的向量中的空字符串

  21. 21

    带字符串顶点的Boost图

  22. 22

    Boost :: any分配字符串值

  23. 23

    Boost序列化字符串*

  24. 24

    Boost :: any分配字符串值

  25. 25

    奇怪的字符串操作问题

  26. 26

    使用std :: find对照字符串向量检查字符串的问题

  27. 27

    是否可以在Windows控制台中使用Boost和STL打印UTF-8字符串?

  28. 28

    在Windows中使用boost :: program_options从命令行参数读取Unicode字符

  29. 29

    映射字符串和向量,如何使用查找

热门标签

归档