在类模板的构造函数的参数里用 typename是什么意思?例如:insert_iterator(Cont& x,typename Cont::iterator it);typename 不是用在类模板的形参里的吗?
2 回答
慕斯王
TA贡献1864条经验 获得超2个赞
形参类型....
你定义了 什么类型
后来调用这个函数的时候 就是什么类型.
比如当初你 定义了 vector<int>
那么 这里的 insert_iterator() 中的 typename 就是 int
三国纷争
TA贡献1804条经验 获得超7个赞
不管是模板类还是普通的类,如果你没有定义带参数的构造函数,那么编译器会为你隐含的实现一个没有参数的默认构造函数(这个默认构造函数什么都不做),但如果你定义了一个带参数的构造函数,编译器就不再为你创建一个默认的构造函数了,先拿普通的类来说:
#include <iostream>
using namespace std;
class CTest
{
public:
CTest(int val)
{
m_nVal = val;
}
private:
int m_nVal;
};
int main()
{
CTest test(8);
}
编译运行都没有问题,但是如果你写成CTest test;就不行了,没有默认构造函数了。模板类是一样的道理,所以问题不在这里,如下程序同样编译运行通过:
#include <iostream>
using namespace std;
template<typename T>
class CTest
{
public:
CTest(T val)
{
m_nVal = val;
}
private:
T m_nVal;
};
int main()
{
CTest<int> test(7);
}
但是如果你写CTest<int> test是不行的,编译不通过。
添加回答
举报
0/150
提交
取消