实例化模板
观察下面这个例子:
template<class Container>
void Print(const Container& v)
{
Container::const_iterator it = v.begin();
while (it != v.end())
{
cout << *it << " ";
}
cout << endl;
}
int main()
{
vector<int> v(10, 1);
Print(v);
return 0;
}
这条代码会导致编译错误。
这是因为编译器在编译期间,不确定Container::const_iterator 是类型还是对象,这里可以使用typename来确定这里的是类型。
template<class Container>
void Print(const Container& v)
{
typename Container::const_iterator it = v.begin();
while (it != v.end())
{
cout << *it << " ";
++it;
}
cout << endl;
}
int main()
{
vector<int> v(10, 1);
Print(v);
return 0;
}
此时使用typename可以确定Container::const_iterator是一个类型。从而进行模板实例化,进而编译成功。
同时,这里可以使用auto来确定类型。
template<class Container>
void Print(const Container& v)
{
//typename Container::const_iterator it = v.begin();
auto it = v