Получить глобальную локаль, которая в настоящее время установлена ​​в C++?

В C++ я могу установить текущую локаль так:

std::locale::global(std::locale(name))

Но как я могу получить текущую глобальную локаль?

В моем коде мне нужно получить текущую локаль, сохранить ее в переменную tmp, установить глобальную локаль на что-то другое, вывести что-то, а затем вернуть ее на предыдущую локаль.

3 ответа

Решение

Если вы вызываете конструктор по умолчанию std::locale, ты понял.

std::locale the_global_locale; // <-- automatically correct to std::locale::global
                               //     or a copy of std::locale::classic

Более подробная информация здесь: http://en.cppreference.com/w/cpp/locale/locale/locale

Его возвращаемое значение - старая локаль, так что просто используйте это.

locale l = locale::global(locale(name));
//do some stuff here
locale::global(l);

Изменить: Потенциально полезно: http://en.cppreference.com/w/cpp/locale/locale/global

Как говорит ipc, конструктор по умолчанию для std::locale дает вам копию текущей глобальной локали, но зачем вам кэшировать, а затем сбрасывать глобальную локаль?

Подпрограммы C++, использующие локаль, обычно могут использовать указанный вами объект локали C++, поэтому вам вообще не нужно связываться с глобальной локалью. Использование объектов локали должно быть предпочтительнее использования глобальной локали C++.

Другие вопросы по тегам