std::messages_byname

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

std::messages_bynamestd::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 用于资源管理:在销毁最后一个保有平面的 std::locale 对象时,如果 refs == 0,那么实现会销毁平面对象。否则不销毁对象。

参数

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 << "无法打开消息目录 \"sed\"\n";
    else
        std::cout << "\"无匹配消息\" "
                  << facet.get(cat, 0, 0, "No match") << '\n'
                  << "\"内存耗尽\" " 
                  << 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")));
}

可能的输出:

"无匹配消息" Keine Übereinstimmung
"内存耗尽" Speicher erschöpft
"无匹配消息" Pas de concordance
"内存耗尽" Mémoire épuisée
"无匹配消息" 照合しません
"内存耗尽" メモリーが足りません

参阅

实现从消息目录获取字符串
(类模板)