模板类外部的内部类方法定义
inner class method definition outside of a template class
我有定义内部类const_iterator
的类Array
template <class T, int SIZE = 100>
class Array
{
// my class here
public:
class const_iterator
{
// my class here
};
void insert(const_iterator position, int value);
};
template <class T, int SIZE /*= 100*/>
void Array<T, SIZE>::insert(const_iterator position, int value)
{
// impl
}
在类之外,我定义了函数,并使用const_iterator position
作为第一个参数类型,而不是编写typename Array<T, SIZE>::const_iterator position
,这正常吗?这个标准符合吗?如果Array
类之外还有另一个const_iterator
类,该怎么办?
是的,它非常好且标准(在类中,在insert()
成员函数接受该类型的参数之前,您需要首先声明const_iterator
)。
对于类之外的成员函数定义,首先在该类的范围内查找类名作用域导入器之后的每个名称。因此,如果在Array
之外还有另一个const_iterator
,我们仍然会首先找到内部的,因为这是我们开始查找的范围。请注意,只有类介绍人之后的那些名称才有这种特殊的查找:
// this is okay
template <class T, int SIZE>
typename Array<T, SIZE>::const_iterator Array<T, SIZE>::some_method() { ... }
// error: this does *not* find the nested const_iterator class
template <class T, int SIZE>
const_iterator Array<T, SIZE>::some_method() { ... }
// this is okay. trailing return type comes after the class introducer
template <class T, int SIZE>
auto Array<T, SIZE>::some_method()
-> const_iterator
{ ... }
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 在静态库中嵌入类方法
- 如何制作一个将函数作为参数的类方法
- 从父类方法返回子类对象
- 使用用户定义的参数调用future/async并调用类方法
- 重载类方法的不明确调用
- 单独定义模板化嵌套类方法的正确语法
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 如何访问由共享指针保存的类方法?
- 将子类方法声明为基类的友元
- 我的模板类方法返回错误类型?
- Qt将信号与另一个类方法连接
- 我无法使用C++指针指向类方法返回的 std::vector
- 如何在成为指向基类的指针后保留对子类方法的使用?
- 检查类方法中是否(此 == nullptr)
- 从基类实例调用派生类方法而不进行强制转换
- C++中基于堆栈的对象如何在内部调用不同的类方法
- 测试C++类内部的方法
- Setter不在类方法内部工作
- 如何实现将数据从用户应用程序传输到类内部存储器的类方法