変数を宣言することは可能ですか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(); }
完全を期すために、言及する価値があるかもしれません。
上記の回答とほぼ同じであるため、クレジットを探していませんが、より読みやすくなっています。
C++ 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) {
}