我遇到过这个函数签名
template<typename T>
template<typename FI>
void vector<T>::_M_assign_aux (FI first, FI last,std::forward_iterator_tag)
{}
它与这个相同吗?
template<typename T, typename FI>
void vector<T>::_M_assign_aux (FI first, FI last,std::forward_iterator_tag)
{}
有没有理由单独写它?
答案 0 :(得分:4)
_M_assign_aux
看起来像是vector<T>
的方法,所以这应该以这样的代码开头:
template<typename T>
class vector
{
// ...
template<typename FI>
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)
{
}
答案 1 :(得分:2)
实际上,这是类模板的方法模板。因此,第一个template <typename T>
适用于vector<T>
(类模板)。然后,template <typename FI>
适用于方法_M_assign_aux()
。
如果您将整个事物收集在一个独特的地方,它将如下所示:
template <typename T>
class vector {
// Some stuff
template <typename FI>
void _M_assign_aux(FI first, FI last, std::forward_iterator_tag) {
// Some impl
}
};