Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Default Converter

Boost , Chapter 1. Boost.Convert 2.0 , Chapter 1. Boost.Convert 2.0

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

В явном виде конвертер

int i = boost::convert<int>("123", converter).value();

обеспечивает значительную гибкость, конфигурируемость и эффективность. Однако в определенных контекстах, которые могут быть не такими важными или даже контрпродуктивными, если, например, приложение опирается на определенное последовательное поведение, связанное с одним конкретным типом преобразователя и конфигурацией. Для размещения такого сценария Boost.Convert вводит понятие конвертер по умолчанию реализовано как boost::cnv::by_default.

[Important]Important

По умолчанию не установлен преобразователь по умолчанию.

Следовательно, без дополнительных шагов конфигурации следующий вызов не будет компилироваться:

int i = boost::convert<int>("123").value(); // No converter provided

Однако после boost::cnv::by_default определяется просто как:

struct boost::cnv::by_default : public boost::cnv::cstream {};

или потенциально настроен с дополнительным форматированием:

struct boost::cnv::by_default : public boost::cnv::cstream
{
    by_default() { (*this)(std::uppercase)(std::hex); }
};

код компилирует и развертывает boost::cnv::cstream когда boost::convert() называется без явно выраженного конвертера:

// No explicit converter provided. boost::cnv::by_default is used.
int         i = boost::convert<int>("F").value_or(-1);
std::string s = boost::convert<std::string>(255).value_or("bad");
// 'i' and 's' are converted using boost::cnv::cstream
// with std::uppercase and std::hex formatting applied.
BOOST_TEST(i == 15);   // 15(10) = F(16)
BOOST_TEST(s == "FF"); // 255(10) = FF(16)

Сделка для удобства - это жесткая конфигурация конвертера (которая в определенных контекстах может быть желаемым поведением) и потенциально влияние производительности. Когда конвертер не представлен явно, конвертер по умолчанию создается, потенциально настроен, развернут и уничтожен для каждого boost::конверт() вызов. Следовательно, если эффективность этого конкретного компонента важна, то реализация boost::cnv::by_default должна будет учитывать это и убедиться, что эти операции дешевы.


PrevUpHomeNext

Статья Default Converter раздела Chapter 1. Boost.Convert 2.0 Chapter 1. Boost.Convert 2.0 может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Chapter 1. Boost.Convert 2.0 ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 21:10:23/0.0054910182952881/1