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

C++

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

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

21.09.2015, 13:56. Просмотров 325. Ответов 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     Написать свой фасет
Посмотрите здесь:

Написать свой MessageBox - C++ Builder
Всем доброго времени суток. Я бы хотел написать свой месежэбокс(с красивыми кнопками, оформлением.) Как мне это сделать? Добавлено...

Написать свой манипулятор - C++
Здравствуйте, подскажите пожалуйста, как для класса A, написать свой манипулятор, который вызвал бы функцию класса? Чтобы манипулятор мог...

Как написать свой таймер? - C++
Чтобы функция выполнялась скажем каждые 200 миллисекунд. Сейчас WM_TIMER делает это, но он не подходит. Искал по многим запросам в гугле и...

Написать свой движок с нуля - C++
Как написать свой движок с нуля при помощью C++. Заранее спасибо.

Как написать свой Браузер на С++ - C++
Всем добрый день Недавно прочитал статейку :read: в интернете (не помню на каком сайте точно) что можно самому написать свой браузер....

Возможно ли написать свой класс 2д графики? - C++
Возможно ли написать свой класс 2д графики? Скажесм, который будет хронить х, у pixel-я, цвет pixel-я, массив растов pixel-ов и т.д. Ну и...

Написать функцию, сдвигающую влево свой аргумент - C++
Привет! Делаю задачи по книге, не могу понять как решить следующую. &quot;Создайте перегружаемую функцию rotate(), которая циклический...

как написать свой движок для сайта? - C++
Всем привет. Дорогие форумчане, меня интересует один несрочный вопросец - как написать свой движок для сайта? В смысле - зародилась...

решил создать свой сайт (написать его на С++) - Кроссплатформенная разработка
привет) я тут кое что не понял если я решил создать свой сайт (написать его на С++) то нужно использовать C++/CLI тоесть код нам...

Как отключить встроенный в ОС протокол ARP? Реально ли написать свой? - C++
Как полностью отключить встроенный в Windows 7 Ultimate протокол ARP? Реально ли написать свой на C++?


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 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, либо свой тип данных с правильной функцией вывода.
Ответ Создать тему
Опции темы

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