我想知道我们是否可以将部分专门课程作为朋友班。
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 >;
}
如何实现上述目标。
答案 0 :(得分:8)
C ++标准(§14.5.3/ 9)不允许这样做:
朋友声明不得声明部分专业化。 [实施例:
template<class T> class A { };
class X {
template <class T> friend class A<T*>; //error
};
- 结束示例]
基本上,您可以对AB
的{{1}}朋友进行所有实例化,也可以只对一个特定的实例进行实例化。 This IBM page描述了朋友和模板可以实现的不同关系:“一对一”,“一对多”,“多对一”和“多对一”许多“(但不是”一对一“,如你所说)。
答案 1 :(得分:1)