std::messages<CharT>::get, std::messages<CharT>::do_get
定义于头文件 <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) 用值 set
、 msgid
和 dfault
,以实现定义方式从打开的消息目录 cat
获得消息。若目录中找不到期待 消息,则返回 dfault
的副本。
参数
cat | - | 从 open() 获得且仍未传递给 close() 的标识符 |
set | - | 实现定义参数, POSIX 中为消息集 |
msgid | - | 实现定义参数, POSIX 中为消息标识 |
dfault | - | 要在目录中查找的字符串(若目录使用字符串查找),亦为失败情况下返回的字符串 |
返回值
来自目录的消息,或若找不到消息则为 dfault
的副本。
注意
POSIX 系统上,此函数调用通常被翻译为对 catgets()
的调用,并原态传递参数 set
、 msgid
和 dfault
给 catgets()
。 GNU libstdc++ 中,此函数忽略 set
和 msgid
,并简单地在要求的本地环境中调用 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