c++;对模板结构声明歧义! 在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) { } } 模板结构对 { 类型定义T1第一个_类型; typedef T2秒_型; T1优先; T2秒; pair():第一个(T1()),第二个(T2()){} 成对(常数T1&x,常数T2&y):第一(x),第二(y){ 模板 配对(constpair&p):第一(p.first),第二(p.second){} }
允许其他代码段声明类型的变量,而无需直接访问类型参数(T1和T2)。容器类中的typedef是一个类似的、不那么简单的示例:c++;对模板结构声明歧义! 在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) { } } 模板结构对 { 类型定义T1第一个_类型; typedef T2秒_型; T1优先; T2秒; pair():第一个(T1()),第二个(T2()){} 成对(常数T1&x,常数T2&y):第一(x),第二(y){ 模板 配对(constpair&p):第一(p.first),第二(p.second){} },c++,templates,definition,ambiguity,std-pair,C++,Templates,Definition,Ambiguity,Std Pair,允许其他代码段声明类型的变量,而无需直接访问类型参数(T1和T2)。容器类中的typedef是一个类似的、不那么简单的示例: vector<int>::iterator curNum; for(curNum = someVect.begin(); curNum != someVect.end(); curNum++) ; //do stuff 它们是传入的T1和T2类型的公共别名,可以在构建对象后引用。这样,您就可以使用例如pair::first_type myVariab
vector<int>::iterator curNum;
for(curNum = someVect.begin(); curNum != someVect.end(); curNum++)
; //do stuff
它们是传入的T1和T2类型的公共别名,可以在构建对象后引用。这样,您就可以使用例如
pair::first_type myVariable
引用代码中的类型,或者,如果您键入了特定风格的模板,那么MyPair::首先键入myVariable
它们只是为了方便您,所以您可以在代码中使用它们。C++没有反射模型,所以这就是你知道它们是什么类型的唯一方法。
假设您定义了自己的一对
typedef对MyPair
然后你可以用
MyPair::第一种类型MyPair::第二种类型 比如说,
MyPair::first_type my_first(MyPair& pair)
{
return pair.first;
}
如果更改MyPair的原始定义,则无需研究和替换代码中的任何地方。在什么代码中没有用?为了得出不使用这些typedef的结论,您检查了哪些特定的代码体?
MyPair::first_type my_first(MyPair& pair)
{
return pair.first;
}