如何在c ++中将模板类声明为朋友

时间:2010-09-17 14:43:52

标签: c++

我想知道我们是否可以将部分专门课程作为朋友班。

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 >;
}

如何实现上述目标。

2 个答案:

答案 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)

请参阅答案here,感谢Drew Dormann

template <class T, class C>
class proxy {
   friend C;

它对我有用。