![]() |
![]() ![]() ![]() ![]() |
![]() |
Default ConverterBoost , Chapter 1. Boost.Convert 2.0 , Chapter 1. Boost.Convert 2.0
|
|||||||||
![]() | 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 должна будет учитывать это и убедиться, что эти операции дешевы.
Статья Default Converter раздела Chapter 1. Boost.Convert 2.0 Chapter 1. Boost.Convert 2.0 может быть полезна для разработчиков на c++ и boost.
:: Главная :: Chapter 1. Boost.Convert 2.0 ::
реклама |