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

when_any, heterogeneous types

Boost , Chapter 1. Fiber , when_any

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

Нам было бы неловко игнорировать случай, когда различные функции задачи имеют разные типы возврата. Это означает, что стоимость, возвращенная первым из них, может иметь любой из этих типов. Это можно выразить с помощьюBoost.Variant..

Чтобы упростить пример, мы вернемся к тому, чтобы сделать вид, что никто из них не может сделать исключение. Это<wait_first_value_het()>сильно напоминает<wait_first_value()>. Мы можем фактически повторно использовать<wait_first_value_impl()>, просто пропуская<boost::variant<T0,T1,...>>как тип значения канала, а не обычный<T>!

Это может быть использовано.<wait_first_success()>Семантика.

// No need to break out the first Fn for interface function: let the compiler
// complain if empty.
// Our functions have different return types, and we might have to return any
// of them. Use a variant, expanding std::result_of<Fn()>::type for each Fn in
// parameter pack.
template< typename ... Fns >
boost::variant< typename std::result_of< Fns() >::type ... >
wait_first_value_het( Fns && ... functions) {
    // Use unbounded_channel<boost::variant<T1, T2, ...>>; see remarks above.
    typedef boost::variant< typename std::result_of< Fns() >::type ... > return_t;
    typedef boost::fibers::unbounded_channel< return_t > channel_t;
    auto channelp( std::make_shared< channel_t >() );
    // launch all the relevant fibers
    wait_first_value_impl< return_t >( channelp,
                                       std::forward< Fns >( functions) ... );
    // retrieve the first value
    return_t value( channelp->value_pop() );
    // close the channel: no subsequent push() has to succeed
    channelp->close();
    return value;
}

Его можно было бы назвать так:

boost::variant< std::string, double, int > result =
    wait_first_value_het(
            [](){ return sleeper("wfvh_third",  150); },
            [](){ return sleeper(3.14,          100); },
            [](){ return sleeper(17,             50); });
std::cout << "wait_first_value_het() => " << result << std::endl;
assert(boost::get< int >( result) == 17);


PrevUpHomeNext

Статья when_any, heterogeneous types раздела Chapter 1. Fiber when_any может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: when_any ::


реклама


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

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