2016-08-04 4 views
4

У меня есть класс Array, который определяет внутренний класс const_iteratorвнутреннее определение метода класса вне класса шаблона

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? Является ли это стандартным? Что делать, если есть класс const_iterator вне класса Array?

+1

В отличие от того, что вы, кажется, предлагаете, это не имеет ничего общего с шаблонами, то же правило будет применяться для не templated класса. – Holt

ответ

4

Да, это прекрасно и стандартные (ну, в пределах класса вы должны объявить const_iteratorпервого до того, ваша функцию insert() члена принимает параметр этого типа).

Для определения функций-членов вне класса каждое имя, появившееся после приложения класса представления класса, сначала рассматривается в рамках этого класса. Так что если бы другой const_iterator вне Array, мы бы до сих пор найти внутреннюю один первый, так как это область мы начинаем искать в Обратите внимание, что это только те имена после класса интродьюсер, которые имеют этот специальный поиск:.

// 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 
{ ... } 
+0

Отредактированный вопрос к правильному. Благодаря! :) –

Смежные вопросы