web-dev-qa-db-ja.com

変数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) {

}
26
user695652

確かに、decltypeを使用してください:

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

他のタイプのように、cv修飾子とdecltype指定子への参照を追加できます。

const decltype(var_a)* b;
42
TartanLlama
decltype(var_a) var_b;

そして、Lorem Ipsumは、回答ごとに必要な最低30文字に到達します。

21
bipll

@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(); }

完全を期すために、言及する価値があるかもしれません。

上記の回答とほぼ同じであるため、クレジットを探していませんが、より読みやすくなっています。

12
skypjack

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) {

}
6
W.F.