C++对模板结构声明模糊!
问题描述:
C++中的pair类的定义中有两个typedef。他们有什么用途?代码中没有使用它们!C++对模板结构声明模糊!
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) { }
}
答
他们只是在这里为你提供方便,所以你可以在你的代码中使用它们。 C++不具有反射模型,所以这是你“知道”他们是什么类型的 假设你定义自己对
的typedef对MyPair的唯一途径;
然后你可以使用
MyPair :: first_type
MyPair :: second_type
例如,
MyPair::first_type my_first(MyPair& pair)
{
return pair.first;
}
这样你就不会需要研究并在代码中的任何地方替换,如果您更改原始定义o f MyPair。
答
它,以允许其他部分的代码以声明变量的类型,而不必类型参数的直接访问(T1 & T2)。类似的,更少的微不足道的,例如是在容器类的类型定义:
vector<int>::iterator curNum;
for(curNum = someVect.begin(); curNum != someVect.end(); curNum++)
; //do stuff
这使用在载体中模板中定义来创建curNum
typedef的iterator
。这将是稍差有用来的C++ 0x的auto
关键字:
for(auto curNum = someVect.begin(); curNum != someVect.end(); curNum++)
;
答
他们的对象被创建后,可以被引用传入的T1和T2类型的公共别名。
答
这样你就可以使用例如代码来引用代码中的类型。 pair<int,string>::first_type myVariable
,或者您已经键入了特定的模板风格,然后MyPair::first_type myVariable
。
在* what * code中没有用处为了得出这些类型定义没有被使用的结论,你检查了哪些特定的代码体? – AnT 2010-07-04 18:39:17
在宣言本身! – Kamran 2010-07-04 19:45:57