Пытаюсь написать класс, реализующий одновременно константный и неконстантый итератор как показано здесь.
Проблема возникает при компиляции следующего участка кода(упрощено):
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
Во-первых нужен #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>&
>;
Когда ввожу разные значения с клавиатуры, значения не меняютсяКак испраить данную ошибку?
Есть поиск в коллекции:
Элементы двух массивов нужно поочередно занести в 3 массивК примеру массивы A(n) и B(n) нужно записать как C(a1, b1, a2, b2, a3, b3)