Compound conversion sequence::convert

Материал из CAMaaS preliminary wiki
Перейти к навигации Перейти к поиску
template <class U>
static constexpr sequence_element<0> convert(U&& arg);

Осуществляет последовательное преобразование типов для своего аргумента в соответствии с параметрами шаблона compound_conversion_sequence.

Параметры шаблона
UТип входного параметра, преобразуемого методом.
Параметры
argУниверсальная ссылка на входной объект, преобразуемый методом.
Возвращаемое значение:
Результат преобразования.

Пусть задана специализация typedef compound_conversion_sequence<convert1_t, convert2_t, ..., convertN_t> instantiation_type;, определенная для преобразований типов convert1_t, convert2_t, ...convertN_t, а также некоторый объект x. Тогда применение метода convert над этим объектом:

instantiation_type::convert(x);

будет эквивалентно последовательному преобразованию:

convert1_t::convert(convert2_t::convert(...convertN_t::convert(x)...))
Пример
struct A {};
struct B:A {};
struct C:A {};
struct D:B, C 
{
    explicit D(int n) {}
    D(short n) {}
};

int main(int argc, char** argv)
{
    auto a = compound_conversion_sequence<
        implicit_conversion_sequence<A, B>,
        explicit_conversion_sequence<D>,
        implicit_conversion_sequence<int>
    >::convert(short());
    D d = int();
    C& c_ref = d;
    auto& a_of_b_ref = compound_conversion_sequence<
        implicit_conversion_sequence<A&, B&>, 
        static_conversion_sequence<D&>
    >::convert(c_ref);
    return 0;
}