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

< 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) 用值 `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

### 参阅