与Boost.ProgramOptions一起使用类似gettext的翻译

时间:2016-12-11 10:46:16

标签: 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"))
;

add_options()返回options_description_easy_init的实例,该实例预先定义()运算符,以便您可以使用上面的语法。现在,该运营商仅接受const char*作为描述,这让我感到困惑。因此,我有以下问题:

  1. 有什么方法可以解决这个问题?
  2. 这门课程的所有权政策是什么?这些指针只是存储,因此来源,应该与描述一样存在,或者它是安全的(哎呀!):

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

1 个答案:

答案 0 :(得分: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更为干净。

      

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