Подружиться со всеми шаблонными классами в другом шаблонном классе - PullRequest
1 голос
/ 24 февраля 2012

Посмотрите на следующий код:

template <typename T, int d>
class Grid {
   //Following line is what I need to change
   template<int d2> friend class Iterator<T,d,d2>;
}

template <typename T, int d, int d2>
class Iterator{ 
    //some code that use private fields of Grid<T,d>
}

template <typename T, int d>
class Iterator<T,d,0>{
    //This specialized class also need to use private parts of Grid<T,d>
}

И специализированный, и не специализированный итератор должен иметь доступ к закрытым частям.Строка:

template<int d2> friend class Iterator<T,d,d2>;

не компилируется с ошибкой: частичная специализация `Итератор 'объявил друга

Кто-нибудь знает, как его заменить?

РЕДАКТИРОВАТЬ: Благодаря @Xeoкомментарий я смог сделать обходной путь:

template<typename TT, int dd, int d2> friend class Iterator;

Однако это дает другу доступ ко всем шаблонам Итератора, а не только к тем, которые имеют первый и второй параметры шаблона.

1 Ответ

1 голос
/ 24 февраля 2012

Это просто обходной путь, но он работает:

template<typename TT, int dd, int d2> friend class Iterator;
...