0

在 C++ 中对类的定义中有两个 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;

然后你可以使用

我的配对::first_type 我的
配对::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. autoC++0x 的关键字会有点用处不大:

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

这样您就可以使用 eg 来引用代码中的类型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 回答