0

C++ のペア クラスの定義には、2 つの typedef があります。それらは何のため?コードでそれらを使用することはありません。

template <class T1, class T2> struct pair
{
  typedef T1 first_type;
  typedef T2 second_type;

  T1 first;
  T2 second;
  pair() : first(T1()), second(T2()) {}
  pair(const T1& x, const T2& y) : first(x), second(y) {}
  template <class U, class V>
    pair (const pair<U,V> &p) : first(p.first), second(p.second) { }
}
4

4 に答える 4

7

それらは便宜上ここにあるだけなので、コードで使用できます。C++ にはリフレクション モデルがないため、それがどのタイプであるかを「知る」唯一の方法です。独自のペアを定義するとします。

typedef ペア MyPair;

次に、使用できます

MyPair::first_type
MyPair::second_type

例えば、

MyPair::first_type my_first(MyPair& pair)
{
    return pair.first;
}

MyPair の元の定義を変更すると、コード内のあらゆる場所を調査して置き換える必要がなくなります。

于 2010-07-04T18:06:30.930 に答える
5

型パラメーター (T1 & T2) に直接アクセスせずに、他のコードが型の変数を宣言できるようにするためです。同様の、あまり自明ではない例として、コンテナ クラスの typedef があります。

vector<int>::iterator curNum;
for(curNum = someVect.begin(); curNum != someVect.end(); curNum++)
    ; //do stuff

iteratorこれは、ベクター テンプレートで定義された typedef を使用してを作成しますcurNum。C++0x のautoキーワードを使用すると、あまり役に立ちません。

for(auto curNum = someVect.begin(); curNum != someVect.end(); curNum++)
    ;
于 2010-07-04T18:00:57.933 に答える
3

これは、たとえば を使用してコード内の型を参照できるようにするためですpair<int,string>::first_type myVariable。または、テンプレートの特定のフレーバーを typedef した場合は、MyPair::first_type myVariable.

于 2010-07-04T18:04:37.163 に答える
1

これらは、渡された T1 および T2 型のパブリック エイリアスであり、オブジェクトの構築後に参照できます。

于 2010-07-04T18:02:48.980 に答える