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

Alternative Interface

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

«Это не вопрос счастья, это требование. Рассмотрим альтернативу #8221; Даг Хортон

Как было указано ранее<boost::optional>- фактический тип, возвращаемый основным интерфейсом<boost::convert()>:

boost::optional<TypeOut> boost::convert(TypeIn const&, Converter const&);

Подписьфункционально завершена, обычно ускользает во время компиляции и является наиболее эффективной при развертывании базового преобразователя. Тем не менее, следующий альтернативный (и, возможно, более традиционный) интерфейс может быть потенциально более подходящим для определенных сценариев развертывания (или из-за личных предпочтений):

TypeOut convert(TypeIn const&, Converter const&, TypeOut const& fallback_value);
TypeOut convert(TypeIn const&, Converter const&, Functor const& fallback_functor);
TypeOut convert(TypeIn const&, Converter const&, boost::throw_on_failure);

Он по-прежнему обеспечивает однозначное поведение и читаемость, полную поддержку различных потоков программ и различные степени обнаружения и обработки отказов преобразования. Он может быть развернут аналогичным образом следующим образом:

struct fallback_func
{
    int operator()() const { log("Failed to convert"); return 42; }
};

// Error-processing behavior are specified unambiguously and uniformly.
// a) i1: Returns the provided fallback value;
// b) i2: Calls the provided failure-processing function;
// c) i3: Throws an exception.
int i1 = convert<int>(str, cnv, fallback_value);
int i2 = convert<int>(str, cnv, fallback_func());
try
{
    // Throwing behavior specified explicitly rather than implied.
    int i3 = convert<int>(str, cnv, boost::throw_on_failure);
}
catch (boost::bad_optional_access const&)
{
  // Handle failed conversion.
}

Тем не менее, описанные интерфейсы являются удобными обертками вокруг основного интерфейса, который обеспечивает описанное поведение:

int m1 = convert<int>(str, cnv).value_or(fallback_value);
int m2 = convert<int>(str, cnv).value_or_eval(fallback_func());
int m3 = convert<int>(str, cnv).value();

или с установленным по умолчанию преобразователем:

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

int n1 = convert<int>(str).value_or(fallback_value);
int n2 = convert<int>(str).value_or_eval(fallback_func());
int n3 = convert<int>(str).value();


PrevUpHomeNext

Статья Alternative Interface раздела 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-20 02:01:23/0.0034019947052002/0