// C2990c.cpp // compile with: /c template<class T> class A; template<class T> struct A2 { friend class A; // C2990 }; // OK template<class T> struct B { template<class T> friend class A; };
非泛行类或者模板类重定义:因此在使用模板类作为友元类的时候,要完整地写出模板类
比如:
template <class T> class SmartPtr
{
T * m_ptr;
public
:
SmartPtr(T* val): m_ptr(val){}
};
template<class T> class U_Ptr
{
template<class T> friend class SmartPtr;
T * m_ptr;
size_t used;
U_Ptr(
int *p): m_ptr(p), used(1){}
~U_Ptr(){
delete m_ptr;}
};