std::messages<CharT>::get, std::messages<CharT>::do_get
Von cppreference.com
| Definiert in Header <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) Öffentliche Member-Funktion, die die geschützte virtuelle Member-Funktion
do_get der am weitesten abgeleiteten Klasse aufruft.2) Ruft eine Nachricht aus dem geöffneten Nachrichten-Katalog cat ab, unter Verwendung der Werte set, msgid und dfault auf eine implementierungsdefinierte Weise. Wenn die erwartete Nachricht im Katalog nicht gefunden wird, wird eine Kopie von dfault zurückgegeben.
Inhalt |
[edit] Parameter
| cat | - | Identifikator des Nachrichten-Katalogs, erhalten von open() und noch nicht an close() übergeben |
| setzt | - | Implementierungsdefinierter Parameter, Nachrichtengruppe unter POSIX |
| msgid | - | Implementierungsdefinierter Parameter, Nachrichten-ID unter POSIX |
| dfault | - | Die Zeichenkette, nach der im Katalog gesucht werden soll (wenn der Katalog Zeichenketten-Look-up verwendet) und auch die Zeichenkette, die im Fehlerfall zurückgegeben werden soll |
[edit] Rückgabewert
Die Nachricht aus dem Katalog oder eine Kopie von dfault, wenn keine gefunden wurde.
[edit] Anmerkungen
Auf POSIX-Systemen führt dieser Funktionsaufruf normalerweise zu einem Aufruf von catgets(), und die Parameter set, msgid und dfault werden unverändert an catgets() übergeben. In GNU libstdc++ ignoriert diese Funktion set und msgid und ruft einfach GNU gettext(dfault) in der erforderlichen Locale auf.
[edit] Beispiel
Das folgende Beispiel demonstriert den Abruf von Nachrichten: auf einem typischen GNU/Linux-System liest es aus /usr/share/locale/de/LC_MESSAGES/sed.mo.
Führen Sie diesen Code aus
#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); }
Mögliche Ausgabe
"No match" in German: Keine Übereinstimmung "Memory exhausted" in German: Speicher erschöpft