Подтвердить что ты не робот

Определите переменную b того же типа, что и переменная a

Можно ли объявить переменную var_b того же типа, что и другая переменная, var_a?

Например:

template <class T>
void foo(T t) {

   auto var_a = bar(t);
   //make var_b of the same type as var_a

}


F_1 bar(T_1 t) {

}

F_2 bar(T_2 t) {

}
4b9b3361

Ответ 1

Конечно, используйте decltype:

auto var_a = bar(t);
decltype(var_a) b;

Вы можете добавить cv-квалификаторы и ссылки на спецификаторы decltype, как если бы это был любой другой тип:

const decltype(var_a)* b;

Ответ 2

decltype(var_a) var_b;

И Lorem Ipsum достигнет требуемого минимума 30 символов за каждый ответ.

Ответ 3

Несмотря на приятный ответ @TartanLlama, это еще один способ использовать decltype для обозначения фактически данного типа:

int f() { return 42; }

void g() {
    // Give the type a name...
    using my_type = decltype(f());
    // ... then use it as already showed up
    my_type var_a = f();
    my_type var_b = var_a;
    const my_type &var_c = var_b;
}

int main() { g(); }

Возможно, стоит упомянуть об этом ради полноты.

Я не ищу для этого кредитов почти так же, как и в вышеупомянутом ответе, но я считаю его более читаемым.

Ответ 4

В древности до появления на С++ 11 люди обращались с ним с использованием чистых шаблонов.

template <class Bar>
void foo_impl(Bar var_a) {
   Bar var_b; //var_b is of the same type as var_a
}

template <class T>
void foo(T t) {
   foo_impl(bar(t));
}


F_1 bar(T_1 t) {

}

F_2 bar(T_2 t) {

}