3

これが私がやりたいことです。私はを使用std::pairしますが、タプル、または実際にはほとんどすべての種類のテンプレートを使用して同じことを実行したいと思います。ペア変数を割り当てるときは、次のように入力する必要があります。

T1 t1;
T2 t2;
std::pair<T1,T2> X;
X = std::pair<T1,T2> (t1, t2);

新しいペアを作成するときに2番目を省略し、<T1,T2>Xの型(私は明らかに作成しようとしています)pair<T1,T2>またはとの型(オブジェクトとオブジェクト、私が欲しいペアがタイプである可能性があります)?t1t2T1T2pair<T1,T2>

4

3 に答える 3

4

はい、使用しますstd::make_pair

std::pair<T1,T2> X;
// some code
X = std::make_pair( t1, t2 );

または、直接初期化できる場合:

std::pair<T1,T2> X = std::make_pair( t1, t2 ); // OR, even better:
std::pair<T1,T2> X( t1, t2 ); 

C ++ 11の場合、初期化はさらに優れています。

auto X = std::make_pair( t1, t2 );

割り当ては同じです:

X = std::make_pair( t1, t2 );

しかし、それは次のようにもなります。

X = { t1, t2 };
于 2012-08-30T08:38:48.127 に答える
4

はい。ただし、テンプレート引数の推定は関数テンプレートでのみ機能し、クラステンプレートのコンストラクターでは機能しません。このため、ライブラリは次の機能を提供します。

X = std::make_pair(t1, t2);

C ++ 11では、ペアとタプルを初期化して、初期化子リストから割り当てることができます。

X = {t1, t2};

またはauto、イニシャライザーからタイプを自動的に指定するために使用できるため、テンプレート引数を指定する必要はありません。

auto X = std::make_pair(t1, t2);
于 2012-08-30T08:39:05.957 に答える
3
std::pair<T1,T2> X = std::make_pair(t1, t2);

またはとC++11

std::pair<T1, T2> X = {t1, t2};

またはとC++11

auto X = std::make_pair(t1, t2);

そして、std::tupleそこにありstd::make_tupleます。

于 2012-08-30T08:38:38.080 に答える