1

我试图提供std::string参数作为选项的描述。一般而言,其生命范围未定义的论点。具体来说,我想提供翻译。

using namespace boost::program_options;
using namespace boost::locale;

options_description desc (translate ("Hello world!"));
desc.add_options ()
    ("help", translate ("Veni vidi vici"))
;

add_options()返回一个实例,options_description_easy_init该实例预先定义了()运算符,以便您可以使用上面的语法。现在,该操作员只接受const char*描述,这让我很恼火。因此,我有以下问题:

  1. 解决这个问题的方法是什么?
  2. 这个类的所有权政策是什么?这些指针是否仅存储,因此源应该与描述一样多地存在,或者它是安全的(糟糕!):

    ("help", translate ("Veni vidi vici").str ().c_str ())
    
  3. const char_type*作为描述参数的理由是什么?

4

1 回答 1

0
  1. 你的名字,我个人建议 Boost Locale http://www.boost.org/doc/libs/1_61_0/libs/locale/doc/html/messages_formatting.html但也许你已经这样做了

  2. 如果没有记录,您可以假设该字符串已被复制。其他任何东西都是(文档)错误

    option_description检查代码并查看确实如此并不难

    std::string m_short_name, m_long_name, m_description;
    // shared_ptr is needed to simplify memory management in
    // copy ctor and destructor.
    shared_ptr<const value_semantic> m_value_semantic;
    
  3. 这使得编译器很明显可以允许任何 C 风格的字符串/文字,同时向用户说明嵌入的 NUL 字符是不可能的(这意味着你不能使用 UCS2 或类似的)。除此之外,我同意将形式参数声明为std::string.

    您可以向库维护者提供带有推理的拉取请求

于 2016-12-12T13:06:18.853 回答