std::messages_byname
来自 cppreference.cn
在头文件 <locale> 中定义 |
||
template< class CharT > class messages_byname : public std::messages<CharT>; |
||
std::messages_byname
是一个 std::messages facet,它封装了从构造时指定的区域设置的消息目录中检索字符串的功能。
目录 |
[编辑] 特化
标准库保证提供以下特化
在头文件
<locale> 中定义 | |
std::messages_byname<char> | 窄/多字节消息目录访问 |
std::messages_byname<wchar_t> | 宽字符串消息目录访问 |
[编辑] 嵌套类型
类型 | 定义 |
catalog
|
std::messages_base<CharT>::catalog |
string_type
|
std::basic_string<CharT> |
[编辑] 成员函数
(构造函数) |
构造一个新的 messages_byname facet(公共成员函数) |
(析构函数) |
销毁一个 messages_byname facet(受保护的成员函数) |
std::messages_byname::messages_byname
explicit messages_byname( const char* name, std::size_t refs = 0 ); |
||
explicit messages_byname( const std::string& name, std::size_t refs = 0 ); |
(自 C++11 起) | |
为具有 name 的区域设置构造一个新的 std::messages_byname
facet。
refs 用于资源管理:如果 refs == 0,则当最后一个保存它的 std::locale 对象被销毁时,实现会销毁该 facet。否则,该对象不会被销毁。
参数
name | - | 区域设置的名称 |
refs | - | 链接到 facet 的引用数 |
std::messages_byname::~messages_byname
protected: ~messages_byname(); |
||
销毁 facet。
继承自 std::messages
嵌套类型
类型 | 定义 |
char_type
|
CharT
|
string_type
|
std::basic_string<CharT> |
[编辑] 数据成员
成员 | 描述 |
std::locale::id id [static] |
facet 的标识符 |
成员函数
调用 do_open ( std::messages<CharT> 的公共成员函数) | |
调用 do_get ( std::messages<CharT> 的公共成员函数) | |
调用 do_close ( std::messages<CharT> 的公共成员函数) |
受保护的成员函数
[虚拟] |
打开一个命名的消息目录 ( std::messages<CharT> 的虚拟受保护成员函数) |
[虚拟] |
从打开的消息目录中检索消息 ( std::messages<CharT> 的虚拟受保护成员函数) |
[虚拟] |
关闭消息目录 ( std::messages<CharT> 的虚拟受保护成员函数) |
[编辑] 示例
运行此代码
#include <iostream> #include <locale> void try_with(const std::locale& loc) { const std::messages<char>& facet = std::use_facet<std::messages<char>>(loc); std::messages<char>::catalog cat = facet.open("sed", std::cout.getloc()); if (cat < 0) std::cout << "Could not open \"sed\" message catalog\n"; else std::cout << "\"No match\" " << facet.get(cat, 0, 0, "No match") << '\n' << "\"Memory exhausted\" " << facet.get(cat, 0, 0, "Memory exhausted") << '\n'; facet.close(cat); } int main() { std::locale loc("en_US.utf8"); std::cout.imbue(loc); try_with(std::locale(loc, new std::messages_byname<char>("de_DE.utf8"))); try_with(std::locale(loc, new std::messages_byname<char>("fr_FR.utf8"))); try_with(std::locale(loc, new std::messages_byname<char>("ja_JP.utf8"))); }
可能的输出
"No match" Keine Übereinstimmung "Memory exhausted" Speicher erschöpft "No match" Pas de concordance "Memory exhausted" Mémoire épuisée "No match" 照合しません "Memory exhausted" メモリーが足りません
[编辑] 参见
实现从消息目录中检索字符串 (类模板) |