C++ 怪异的模板规范
我遇到了这个函数签名C++ 怪异的模板规范,c++,templates,C++,Templates,我遇到了这个函数签名 template<typename T> template<typename FI> void vector<T>::_M_assign_aux (FI first, FI last,std::forward_iterator_tag) {} 模板 模板 void vector::_M_assign_aux(FI first,FI last,std::forward_iterator_标记) {} 它和这个相等吗 template&l
template<typename T>
template<typename FI>
void vector<T>::_M_assign_aux (FI first, FI last,std::forward_iterator_tag)
{}
模板
模板
void vector::_M_assign_aux(FI first,FI last,std::forward_iterator_标记)
{}
它和这个相等吗
template<typename T, typename FI>
void vector<T>::_M_assign_aux (FI first, FI last,std::forward_iterator_tag)
{}
模板
void vector::_M_assign_aux(FI first,FI last,std::forward_iterator_标记)
{}
有任何理由单独编写吗?
\u M\u assign\u aux
看起来像是一种向量的方法,因此应该从如下代码开始:
template<typename T>
class vector
{
// ...
template<typename FI>
void _M_assign_aux(FI first, FI last,std::forward_iterator_tag);
// ...
};
template <typename T>
class vector {
// Some stuff
template <typename FI>
void _M_assign_aux(FI first, FI last, std::forward_iterator_tag) {
// Some impl
}
};
模板
类向量
{
// ...
模板
void _M_assign_aux(FI first,FI last,std::forward_iterator_tag);
// ...
};
看一看类声明,解释更加“可见”:类有一个模板声明,方法有一个模板声明
template<typename T> // template declaration for vector
template<typename FI> // template declaration for _M_assign_aux
void vector<T>::_M_assign_aux(FI first, FI last,std::forward_iterator_tag)
{
}
template//向量的模板声明
模板//用于_M_assign_aux的模板声明
void vector::_M_assign_aux(FI first,FI last,std::forward_iterator_标记)
{
}
实际上,这是类模板的方法模板。因此,第一个模板
适用于向量
(类模板)。然后,模板
应用于方法\u M\u assign\u aux()
如果你将整个东西收集到一个独特的地方,它会是这样的:
template<typename T>
class vector
{
// ...
template<typename FI>
void _M_assign_aux(FI first, FI last,std::forward_iterator_tag);
// ...
};
template <typename T>
class vector {
// Some stuff
template <typename FI>
void _M_assign_aux(FI first, FI last, std::forward_iterator_tag) {
// Some impl
}
};
模板
类向量{
//一些东西
模板
void\u M\u assign\u aux(FI first,FI last,std::forward\u iterator\u标记){
//一些简单的
}
};
是的,这实际上是vector.tcc提供的。还有一个关于g++的问题。stl_vector.h和vector.tcc的区别是什么?@JiříLechner.tcc通常用作模板类实现的扩展。