Читаем C++. Сборник рецептов полностью

 case time_base::mdy:

  s = "month/day/year";

  break;

 case time_base::ymd:

  s = "year/month/day";

  break;

 case time_base::ydm:

  s = "year/day/month";

  break;

 }

 cout << "Date order for locale " << cin.getloc().name()

  << " is " << s << endl;

}

Имеется еще одно средство, которое может оказаться полезным при инстанцировании фасетов: has_facet. Шаблон этой функции возвращает значение типа bool, показывающее, определен или нет нужный вам фасет в заданной локализации. Поэтому для надежности используйте has_facet во всех случаях, когда вы инстанцируете фасет. Если она возвращает значение «ложь», вы всегда можете перейти к используемой по умолчанию классической локализации С, поскольку ее наличие гарантировано в реализации, отвечающей требованиям стандарта. has_facet применяется следующим образом.

if (has_facet >(loc)) {

 const time_put& dateWriter =

  use_facet >(loc);

Разобравшись однажды в синтаксисе классов time_get и time_put, вы поймете, что использовать их достаточно просто. Как всегда, можно воспользоваться typedef, чтобы свести к минимуму количество неприятных угловых скобок.

typedef time_put TimePutNarrow;

typedef time_get TimeGetNarrow;

// ...

const TimeGetNarrow& dateReader = use_facet(loc);

Процедура записи и чтения дат в локализованных форматах немного утомительна, однако, после того как вы один раз разберетесь в требованиях класса локализации locale, вы сможете это делать эффективно и быстро. Глава 5 полностью посвящена датам и временам, поэтому более детальные сведения по форматированию вывода дат и времен вы найдете в рецепте 5.2.

Смотри также

Глава 5 и рецепт 5.2.

13.4. Запись и чтение денежных значений

Проблема

Требуется записать в поток или прочитать из него денежное значение.

Решение

Используйте фасеты money_put и money_get для записи или чтения денежных значений, как показано в примере 13.6.

Пример 13.6. Запись и чтение денежных значений

#include

#include

#include

#include


using namespace std;


long double readMoney(istream& in, bool intl = false) {

 long double val;

 // Создать фасет для чтения

 const money_get& moneyReader =

  use_facet >(in.getloc());

 // Маркер конца

 istreambuf iterator end;

 // Переменная состояния для обнаружения ошибок

 ios_base::iostate state = 0;

 moneyReader.get(in, end, intl, in, state, val);

 // если что-то не получилось, будет установлен бит неудачного завершения

 if (state != 0 && !(state & ios_base::eofbit))

  throw "Couldn't read money!\n";

 return(val);

}


void writeMoney(ostream& out, long double val, bool intl = false) {

 // Создать фасет для записи

 const money_put& moneyWriter =

  use_facet >(out.getloc());

 // Записать данные в поток. Вызвать failed() (возвращает итератор

 // ostreambuf_iterator), чтобы можно было обнаружить ошибку.

 if (moneyWriter.put(out, intl, out, out.fill(), val).failed())

  throw "Couldn't write money!\n";

}


int main() {

 long double val = 0;

 float exchangeRate = 0.775434f; // Курс доллара по отношению к евро

 locale locEn("english");

 locale locFr("french");

 cout << "Dollars: ";

 cin.imbue(locEn);

 val = readMoney(cin, false);

 cout.imbue(locFr);

 // Установить флаг showbase, чтобы выводить символ валюты

 cout.setf(ios_base::showbase);

 cout << "Euros: ";

 writeMoney(cout, val = exchangeRate, true);

}

Перейти на страницу:

Похожие книги

1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных
C++ Primer Plus
C++ Primer Plus

C++ Primer Plus is a carefully crafted, complete tutorial on one of the most significant and widely used programming languages today. An accessible and easy-to-use self-study guide, this book is appropriate for both serious students of programming as well as developers already proficient in other languages.The sixth edition of C++ Primer Plus has been updated and expanded to cover the latest developments in C++, including a detailed look at the new C++11 standard.Author and educator Stephen Prata has created an introduction to C++ that is instructive, clear, and insightful. Fundamental programming concepts are explained along with details of the C++ language. Many short, practical examples illustrate just one or two concepts at a time, encouraging readers to master new topics by immediately putting them to use.Review questions and programming exercises at the end of each chapter help readers zero in on the most critical information and digest the most difficult concepts.In C++ Primer Plus, you'll find depth, breadth, and a variety of teaching techniques and tools to enhance your learning:• A new detailed chapter on the changes and additional capabilities introduced in the C++11 standard• Complete, integrated discussion of both basic C language and additional C++ features• Clear guidance about when and why to use a feature• Hands-on learning with concise and simple examples that develop your understanding a concept or two at a time• Hundreds of practical sample programs• Review questions and programming exercises at the end of each chapter to test your understanding• Coverage of generic C++ gives you the greatest possible flexibility• Teaches the ISO standard, including discussions of templates, the Standard Template Library, the string class, exceptions, RTTI, and namespaces

Стивен Прата

Программирование, программы, базы данных