如何将模板 class 与其朋友模板 class 分离到不同的头文件中?

How to separate a template class from its friend template class into different header files?

一个文件包含模板class A和模板class B。A是B的朋友。

我想把它们分成不同的文件。如何处理?

A.h

#if !defined(FILE_A_H)
#define      FILE_A_H

template<class T>
class A
{
  template<class> friend class B;

  // ...
};

#endif

B.h

#if !defined(FILE_B_H)
#define      FILE_B_H

template<class T> class B { /* ... */ };

#endif

注意,如果在友元声明中使用的class的名称还没有声明,则当场向前声明(见http://en.cppreference.com/w/cpp/language/friend)。

更多详情: