gpt4 book ai didi

c++ - 如何在多对多友元中链接两个模板类?

转载 作者:行者123 更新时间:2023-11-30 03:08:35 26 4
gpt4 key购买 nike

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

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

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

我怎样才能将他们链接成多对多的友元。例如,在 First 中添加一个方法,打印 Second 的参数对象的 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 的前向声明在与特定实例成为 friend 之前使用模板,但这允许您仅向特定实例授予对类内部的访问权限。

关于c++ - 如何在多对多友元中链接两个模板类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4846486/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com