Какой Boost UTF используется в настоящее время?

Следуя руководству по ускорению (http://www.boost.org/doc/libs/1_56_0/libs/locale/doc/html/using_localization_backends.html),

Я могу установить бэкэнд UTF, используя:

boost::locale::localization_backend_manager my = boost::locale::localization_backend_manager::global();
my.select("std");

Есть ли способ проверить, действительно ли используется std-бэкэнд?

Мне кажется, что я могу получить все доступные бэкэнд, но не текущий активный

boost::locale::localization_backend_manager lbm = boost::locale::localization_backend_manager::global();
auto s = lbm.get_all_backends();
for_each(s.begin(), s.end(), [](string& x){ cout << x << endl; });

Ответы

Ответ 1

Не совсем, нет. Существует не способ получить текущую поддержку по множеству причин:

  • Нет публичной функции API, которая дает вам доступ к используемым back-end
  • localization_backend использует идиом pimpl для отсрочки фактической реализации back-end. Там нет отражения ни в localization_backend, ни в самих back-end
  • Этот комментарий от localization_backend.hpp:

    Бакеры обычно регистрируются внутри локализации менеджера и разрешить прозрачную поддержку разных бэкэндов, поэтому пользователь может переключать бэкэнд, просто привязывая приложение к исправьте.

    ...

    Каждый бэкэнд может быть установлен с другим приоритетом по умолчанию, поэтому когда вы работаете с двумя разными бэкендами, вы можете указать priotiry так этот бэкэнд будет выбран в соответствии с их приоритетом.

Это было бы излишним усложнением реализации, так как поверх функции приоритета могут быть установлены конкретные концы для определенных категорий локалей. Boost.Locale предназначен для "просто работы" с любыми концами, с которыми он настроен, с прозрачностью и двоичной совместимостью. Как сказал комментатор, это не очень полезная информация, поскольку вы используете эту библиотеку для абстрагирования функций библиотеки/платформы.