我知道我们是否可以将部分专业课作为朋友班.
template< class A, class B >
class AB{};
class C;
template < class B >
class AB< C, B >{};
class D{
template< class E > friend class AB< D, E >;
}
Run Code Online (Sandbox Code Playgroud)
如何实现上述目标.
C++标准(第14.5.3/9节)不允许这样做:
朋友声明不得声明部分专业化.[例:
template<class T> class A { };
class X {
template <class T> friend class A<T*>; //error
};
Run Code Online (Sandbox Code Playgroud)
- 末端示例]
所以基本上,你既可以AB做朋友的所有实例化,也可以D只做一个特定的实例化.这个IBM页面描述了朋友和模板可以实现的不同关系:"一对一","一对多","多对一"和"多对多" (但不是你所问的"一对一").