![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
ConvertersBoost , Chapter 1. Boost.Convert 2.0 , Chapter 1. Boost.Convert 2.0
|
![]() | Note |
---|---|
Конвертеры должны быть независимыми и не должны полагаться на.Усиление.Преобразованиеинфраструктуры. |
Вероятно, стоит упомянуть, чтоTypeInв подписи нужно интерпретировать не буквально, а скорее в контексте потенциальных имплицитных рекламных акций и конверсий типов, разрешенныхязыком. В зависимости от контекста преобразователиtake_double
иtake_int
могут не делать того, что от них ожидается, из-за имплицитногоint-to-doubleпродвижения и разрушения стоимостиdouble-to-intпреобразования, примененногокомпилятором:
struct take_double { void operator()(double, boost::optional<string>&) const {}}; struct take_int { void operator()(int, boost::optional<string>&) const {}};
convert<string>(11, take_double()); // Compiler applies 'int' to 'double' promotion to call the converter. convert<string>(11.23, take_int()); // Compiler applies 'double' to 'int' implicit truncation.
повысить::преобразовать[]
API не модифицироватьTypeInили интерпретировать его каким-либо образом. Передаваемое значение и его тип доставляются в базовый преобразователь как есть. Следовательно, если потенциальные неявные рекламные акции и конверсии нежелательны, ответственность за решение этой проблемы лежит на преобразователе. Например, одним из способов отключения неявных конверсий может быть:
struct double_only { // Declared for all types. template<typename TypeIn> void operator()(TypeIn, boost::optional<string>&) const; }; // Defined only for certain types. template<> void double_only::operator()<double>(double, boost::optional<string>&) const {}
convert<string>(11.23, double_only()); // Fine. // convert<string>(11, double_only()); // Fails: undefined reference to double_only::operator()<int>
Статья Converters раздела Chapter 1. Boost.Convert 2.0 Chapter 1. Boost.Convert 2.0 может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Chapter 1. Boost.Convert 2.0 ::
реклама |