std::conditional параметр в конструкторе

189
06 февраля 2019, 04:30

Пытаюсь написать класс, реализующий одновременно константный и неконстантый итератор как показано здесь.

Проблема возникает при компиляции следующего участка кода(упрощено):

class SimpleIt {
    using my_vector_ref_type = named_vector<T>&;
public:
    SimpleIt(my_vector_ref_type r) {}
};
//То же самое, но с std::conditional
template <bool is_const>
class CondIt {
    using my_vector_ref_type = std::conditional<
            is_const,
            const named_vector<T>&,
            named_vector<T>&
    >;
public:
    CondIt(my_vector_ref_type r) {}
};
iterator begin() {
    SimpleIt si(*this); //Компилирует
    CondIt<false> c(*this); //error: no matching constructor for initialization of 'CondIt<false>'

PS: http://tpcg.io/FBny1V

Answer 1

Во-первых нужен #include <type_traits>, во вторых нужно имя типа:

using my_vector_ref_type = typename ::std::conditional
<
        is_const
,       const named_vector<T>&
,       named_vector<T>&
>::type;

А если используется с++14, то можно написать короче:

using my_vector_ref_type = ::std::conditional_t
<
        is_const
,       const named_vector<T>&
,       named_vector<T>&
>;
READ ALSO
При вводе чисел не меняется значение выражения

При вводе чисел не меняется значение выражения

Когда ввожу разные значения с клавиатуры, значения не меняютсяКак испраить данную ошибку?

214
Чередование двух массивов java

Чередование двух массивов java

Элементы двух массивов нужно поочередно занести в 3 массивК примеру массивы A(n) и B(n) нужно записать как C(a1, b1, a2, b2, a3, b3)

255
Разбиение массива

Разбиение массива

Можем ли из массива вида: 2110

186