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

rkb*_*rkb 9 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 >;
}
Run Code Online (Sandbox Code Playgroud)

如何实现上述目标.

Luc*_*lle 8

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页面描述了朋友和模板可以实现的不同关系:"一对一","一对多","多对一"和"多对多" (但不是你所问的"一对一").