powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / проблема с велосипедом. codecvt vs codecvt_base ...
1 сообщений из 1, страница 1 из 1
проблема с велосипедом. codecvt vs codecvt_base ...
    #38614398
RubinDm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть такой код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
::std::codecvt_base* find_codecvt(some parameter)
{
  if (blablabla)
    return new ::std::codecvt_utf8
      < wchar_t, 0x10ffff, ::std::codecvt_mode::generate_header>();
  else
    return new ::std::codecvt_utf16
		< wchar_t, 0x10ffff
		, (::std::codecvt_mode)
			( ::std::codecvt_mode::generate_header
			| ::std::codecvt_mode::little_endian
			);
  // на самом деле в реальном коде вариантов выбора фасета много больше.
  // но суть в том, что метод возвращает фасеты РАЗНЫХ типов.
  // И единственное, что объединяет эти разные типы - это общий базовый класс фасетов codecvt_base.
  // Именно поэтому метод возвращает указатель на экземпляр базового класса codecvt_base.
}

Внимание вопрос: КАК применить найденный экземпляр к локали? Код, показанный ниже, не собирается
Код: plaintext
1.
2.
::std::codecvt_base* pcodecvt = find_codecvt(someparameter);
::std::locale my_locale(::std::locale(), pcodecvt);

Получаем:
Код: plaintext
1.
2.
error C2039: 'id' : is not a member of 'std::codecvt_base'
'std::locale::id' : illegal use of this type as an expression

Природа ошибки мне ясна - конструктору локали от указанного фасета не хватает id'шника, который реализован статически членом на уровне шаблона codecvt<...> (наследника от не-шаблона codecvt_base). id'шника нет на уровне codecvt_base. При этом на этапе создания локали с попыткой применения фасета я НЕ владею информацией о реальном типе фасета (шаблона) и привести его к какому бы то ни было классу (с id'шником) я НЕ могу. Вопрос.. как это можно разрулить?
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / проблема с велосипедом. codecvt vs codecvt_base ...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]