C++ 在Boost.ProgramOptions中使用类似gettext的翻译

C++ 在Boost.ProgramOptions中使用类似gettext的翻译,c++,boost,boost-program-options,boost-locale,C++,Boost,Boost Program Options,Boost Locale,我试图提供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")) ;

我试图提供
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\u description\u easy\u init
的实例,该实例预先定义了
()
运算符,以便您可以使用上述语法。现在,这个操作符只接受
constchar*
作为描述,这让我很恼火。因此,我有以下问题:

  • 解决这个问题的方法是什么
  • 该类的所有权政策是什么?这些指针是否只被存储,因此源代码应该和描述一样有效,或者可以安全地(糟糕!)

  • 只有
    const char\u type*
    作为描述参数的基本原理是什么

  • 你说得对,我个人建议你提高语言环境,但也许你已经这么做了

  • 如果未记录任何内容,则可以假定字符串已复制。其他任何东西都是(文档)bug

    检查
    option\u 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;
    
    std::字符串m_short_name、m_long_name、m_description;
    //需要共享的ptr来简化内存管理
    //复制构造函数和析构函数。
    共享值语义;
    
  • 这使得编译器显然可以允许任何C样式的字符串/文字,同时向用户说明嵌入的NUL字符是不可能的(这意味着您不能使用UCS2或类似的字符)。除此之外,我同意将形式参数声明为
    std::string
    会更干净

    您可以向库提供带有推理的pull请求 维修人员

  • 你说得对,我个人建议你提高语言环境,但也许你已经这么做了

  • 如果未记录任何内容,则可以假定字符串已复制。其他任何东西都是(文档)bug

    检查
    option\u 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;
    
    std::字符串m_short_name、m_long_name、m_description;
    //需要共享的ptr来简化内存管理
    //复制构造函数和析构函数。
    共享值语义;
    
  • 这使得编译器显然可以允许任何C样式的字符串/文字,同时向用户说明嵌入的NUL字符是不可能的(这意味着您不能使用UCS2或类似的字符)。除此之外,我同意将形式参数声明为
    std::string
    会更干净

    您可以向库提供带有推理的pull请求 维修人员


  • 每次一个问题每次一个问题我真的不喜欢用
    translate(“abc”).str().c_str()
    的方法。由于设计上的改变,我有幸改用
    msg.c_str()
    。至于基本原理——
    const char*
    只是阻止你犯许多错误中的一个(例如使用
    \b
    等)。我看不出其中的道理。话虽如此,我感谢你的回答-谢谢你。就像我说的,你有一个观点,你可以向开发者提出。我相信他们欢迎你的意见。不管怎样,你的问题也是关于安全的。我回答说,这很安全。我真的不喜欢用
    translate(“abc”).str().c_str()
    的方法。由于设计上的改变,我有幸改用
    msg.c_str()
    。至于基本原理——
    const char*
    只是阻止你犯许多错误中的一个(例如使用
    \b
    等)。我看不出其中的道理。话虽如此,我感谢你的回答-谢谢你。就像我说的,你有一个观点,你可以向开发者提出。我相信他们欢迎你的意见。不管怎样,你的问题也是关于安全的。“很安全,”我回答说。