*有些初学者(我)可能会奇怪,为什么有些友元需要前置声明而另一些友元不需要前置声明?*
目前我先发在这篇博客中,等我会了,再回来记录
1、类模板做友元
情况1、当某类模板Ca的特定实例做类模板Cb的友元时,该类模板Ca需要前置声明
这里的Ca的特定实例(与Cb类型相同的实例)作为Cb的友元,因此要进行前置声明
template<class T> class Ca;
template<class T>
class Cb
{
friend Ca<T>;
};
template<class T>
class Ca {};
情况2、当某类模板Ca的所有实例都作为类模板Cb的友元时,则Ca不需要前置声明
template<class T>
class Cb
{
template<class N> friend class Ca;
};
template<class N>
class Ca {};
情况3、当类模板声明自己的模板形参为友元时,无论该模板形参是什么,都不需要进行前置声明
template<class T>
class Cb
{
friend T;
};
class C
{
};
int main()
{
Cb<C> c;
}
------Cpp primer学习日记
如果大佬有补充,写在评论区,我会补充到博客中,并写上昵称