命名空间
变体
操作

std::messages_byname

来自 cppreference.com
< cpp‎ | locale
在头文件 <locale> 中定义
template< class CharT >
class messages_byname : public std::messages<CharT>;

std::messages_byname 是一个 std::messages 面,它封装了从在构造时指定的区域设置的消息目录中检索字符串的操作。

内容

[编辑] 特化

标准库保证提供以下特化

在头文件 <locale> 中定义
std::messages_byname<char> 窄/多字节消息目录访问
std::messages_byname<wchar_t> 宽字符串消息目录访问

[编辑] 成员类型

成员类型 定义
catalog std::messages_base<CharT>::catalog
string_type std::basic_string<CharT>

[编辑] 成员函数

(构造函数)
构造一个新的 messages_byname 面。
(公共成员函数) [编辑]
(析构函数)
销毁一个 messages_byname 面。
(受保护的成员函数) [编辑]

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 面。

refs 用于资源管理:如果 refs == 0,则实现会在最后一个包含它的 std::locale 对象被销毁时销毁该面。否则,该对象不会被销毁。

参数

name - 区域设置的名称
refs - 链接到该面的引用数量

std::messages_byname::~messages_byname

protected:
~messages_byname();

销毁该面。

std::messages 继承

成员类型

成员类型 定义
char_type CharT
string_type std::basic_string<CharT>

成员对象

成员名称 类型
id (静态) std::locale::id

成员函数

调用 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" メモリーが足りません

[编辑] 另请参阅

实现从消息目录中检索字符串的操作
(类模板) [编辑]