Посмотрите на следующий код:
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;
Однако это дает другу доступ ко всем шаблонам Итератора, а не только к тем, которые имеют первый и второй параметры шаблона.