Ответ 1
Конечно, используйте decltype
:
auto var_a = bar(t);
decltype(var_a) b;
Вы можете добавить cv-квалификаторы и ссылки на спецификаторы decltype
, как если бы это был любой другой тип:
const decltype(var_a)* b;
Можно ли объявить переменную 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) {
}
Конечно, используйте decltype
:
auto var_a = bar(t);
decltype(var_a) b;
Вы можете добавить cv-квалификаторы и ссылки на спецификаторы decltype
, как если бы это был любой другой тип:
const decltype(var_a)* b;
decltype(var_a) var_b;
И Lorem Ipsum достигнет требуемого минимума 30 символов за каждый ответ.
Несмотря на приятный ответ @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(); }
Возможно, стоит упомянуть об этом ради полноты.
Я не ищу для этого кредитов почти так же, как и в вышеупомянутом ответе, но я считаю его более читаемым.
В древности до появления на С++ 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) {
}