c++ - 奇怪的模板规范

标签 c++ templates

我遇到过这个函数签名

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)
{}

有什么理由单独写吗?

最佳答案

_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)
{
}

关于c++ - 奇怪的模板规范,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39706559/

相关文章:

c++ - 运行使用 OpenGL 3.3 的 mac os x c++ 程序

c++ - 从未知结构 C++ 构造树(非二进制)结构

C++如何使用其中也包含此类的类中的枚举

c++ - 我应该在这些模板参数中为此函数调用些什么?

C++ - 泛型编程 - 类型选择

c++ - make_unique 和完美的转发

c++ - 函数返回基类而不是派生类,这是编码错误还是 Visual C++ 错误?

c++ - 为什么 C++ 这样做?

c++ - 条件显式模板实例化

c++ - 如何在不创建实例的情况下获取类的方法成员的类型?