Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
DiffEreD
1427 / 764 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
#1

Написать свой фасет - C++

21.09.2015, 13:56. Просмотров 313. Ответов 1
Метки нет (Все метки)

Есть задача - написать свой собственный фасет, что бы выводил вместо некоторых цифр их словесное название. Из всех фасетов, что есть в библиотеке, я так и не нашел того который бы делал такое. Видимо, единый вариант это отнаследоваться от std::locale::facet. Но мне не понятно, какой у него должен быть теперь интерфейс с функций и как заставить его использовать нужное мне поведение. И, можно ли вообще реализовать такое с помощью фасетов?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <string>
#include <locale>
 
class custom_facet : public std::locale::facet {
public:
   static std::locale::id id;
   explicit custom_facet(std::size_t refs = 0) : facet(refs) {}
 
   std::string to_digit_name(char ch) const
   {
      if (ch == '1') return "one";
      else if (ch == '2') return "two";
      else
      {
         //return original digit
      }
   }
};
 
int main()
{
   std::locale  custom_locale (std::locale(), new custom_facet);
   std::cout.imbue(custom_locale);
   std::cout << "1 2 3"; // must print: one two 3
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.09.2015, 13:56     Написать свой фасет
Посмотрите здесь:

решил создать свой сайт (написать его на С++)
C++ Написать свой итератор, чтобы алгоритмы STL работали с моим классом
Как написать свой Браузер на С++ C++
C++ как написать свой движок для сайта?
Свой формат C++ Builder
C++ Builder Написать свой MessageBox
Возможно ли написать свой класс 2д графики? C++
Как написать свой таймер? C++
Написать свой манипулятор C++
C++ Написать функцию, сдвигающую влево свой аргумент
C++ Написать свой движок с нуля
Как отключить встроенный в ОС протокол ARP? Реально ли написать свой? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
22.09.2015, 10:29     Написать свой фасет #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
DiffEreD, Я полагаю лучше посмотреть сюда: http://en.cppreference.com/w/cpp/locale/num_put и попробовать имплементировать этот интерфейс.

Добавлено через 1 час 23 минуты
М, я совсем не прав. num_put тут не поможет конечно. Я бы предпочел использовать boost::iostreams.

Добавлено через 15 часов 27 минут
Касательно фасетов можно почитать тут: http://www.drdobbs.com/the-standard-...acet/184403785

Добавлено через 9 минут
Но вообщем, такое через facet я бы делать не стал (я вообще полагаю что это не совсем возможно). Либо boost::iostreams, либо свой ostream, либо свой тип данных с правильной функцией вывода.
Yandex
Объявления
22.09.2015, 10:29     Написать свой фасет
Ответ Создать тему
Опции темы

Текущее время: 16:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru