std::messages<CharT>::get, std::messages<CharT>::do_get

来自cppreference.com
< cpp‎ | locale‎ | messages
定义于头文件 <locale>
public:
string_type get( catalog cat, int set, int msgid, const string_type& dfault ) const;
(1)
protected:
virtual string_type do_get( catalog cat, int set, int msgid, const string_type& dfault ) const;
(2)

1) 公开成员函数,调用最终导出类的受保护虚成员函数 do_get

2) 用值 setmsgiddfault ,以实现定义方式从打开的消息目录 cat 获得消息。若目录中找不到期待 消息,则返回 dfault 的副本。

参数

cat - open() 获得且仍未传递给 close() 的标识符
set - 实现定义参数, POSIX 中为消息集
msgid - 实现定义参数, POSIX 中为消息标识
dfault - 要在目录中查找的字符串(若目录使用字符串查找),亦为失败情况下返回的字符串

返回值

来自目录的消息,或若找不到消息则为 dfault 的副本。

注意

POSIX 系统上,此函数调用通常被翻译为对 catgets() 的调用,并原态传递参数 setmsgiddfaultcatgets() 。 GNU libstdc++ 中,此函数忽略 setmsgid ,并简单地在要求的本地环境中调用 GNU gettext(dfault)

示例

下列代码演示消息取得:典型的 GNU/Linux 上,它从 /usr/share/locale/de/LC_MESSAGES/sed.mo 读取

#include <iostream>
#include <locale>
 
int main()
{
    std::locale loc("de_DE.utf8");
    std::cout.imbue(loc);
    auto& facet = std::use_facet<std::messages<char>>(loc);
    auto cat = facet.open("sed", loc);
    if(cat < 0 )
        std::cout << "Could not open german \"sed\" message catalog\n";
    else
        std::cout << "\"No match\" in German: "
                  << facet.get(cat, 0, 0, "No match") << '\n'
                  << "\"Memory exhausted\" in German: "
                  << facet.get(cat, 0, 0, "Memory exhausted") << '\n';
    facet.close(cat);
}

可能的输出:

"No match" in German: Keine Übereinstimmung
"Memory exhausted" in German: Speicher erschöpft

参阅