假设我有以下两个模板类:

template <class _A>
class First
{
private:
    int a;
};

template <class _B>
class Second
{
private:
    int b;
};

我怎么能将它们连接在许多多的友谊。例如,加入一个方法在第一印b的一个参数对象的第二个。

是我的问题清楚了吗?

有帮助吗?

解决方案

template <typename T>
class First {
   int a;
   template<typename> friend class Second;
};
template <typename T>
class Second
{
   int b;
   template<typename> friend class First;
};

这将使每 First<T> 访问的内部每 Second<U>.现在,虽然这是将技术解决方案,您可能想要考虑是否设计与环依存关系和开放的内部任何实例的其他类是最好的解决方案,以你的特别的问题。

顺便说一句,如果您只要授予 First<int> 访问 Second<int> (而不 Second<double>)你可以做像这样:

template <typename> class Second;
template <typename T>
class First {
   int a;
   friend class Second<T>; // only befriend the same instantiation
};
template <typename T>
class Second {
   int b;
   friend class First<T>;
};

在这第二个版本,你需要向前的宣言 Second 模板之前结交的一个具体实例,但这个可以授予访问的内部结构类只有一个具体实例。

其他提示

假设您了解保护,那就是模板的问题正向声明: 通用标签

您可以从每个类的声明开始: 通用标签

现在两个类都将在它们的定义中了解另一个。您可以根据需要将它们声明为好友。 通用标签

,反之亦然。

如果它们需要查看彼此的详细信息,即它们不能使用“转发声明”副本,也可以在类定义下实现它们。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top