请看以下代码:
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>;
没有编译错误:部分特化`Iterator'声明了朋友
有人知道如何更换吗?
编辑: 感谢@Xeo评论我能够解决方法:
template<typename TT, int dd, int d2> friend class Iterator;
然而,这使得朋友不仅可以访问具有匹配的第一和第二模板参数的所有Iterator模板。
答案 0 :(得分:1)
这只是一种解决方法,但它正在运作:
template<typename TT, int dd, int d2> friend class Iterator;