Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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++;对模板结构声明歧义! 在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

允许其他代码段声明类型的变量,而无需直接访问类型参数(T1和T2)。容器类中的typedef是一个类似的、不那么简单的示例:

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;
}