friend class B;"语法-6ren"> friend class B;"语法-下面是一个简单的 c++ 程序,它使用我的 MinGW 编译器编译,并按预期执行: #include template class A { T a; template frien-6ren">
gpt4 book ai didi

c++ - 试图理解 "template friend class B;"语法

转载 作者:太空宇宙 更新时间:2023-11-03 10:32:11 24 4
gpt4 key购买 nike

下面是一个简单的 c++ 程序,它使用我的 MinGW 编译器编译,并按预期执行:

#include <iostream>


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

public:
A<T> (T t) : a(t) {}
};



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

public:

B<T> (T t) : aa(t) {}

T getT() const {return aa.a;}
};


int main() {
B<int> b(5);
std::cout << "> " << b.getT() << std::endl;
}

B<T>::getT()访问私有(private) A<T>::a成员(member), A<T>使 B<T>一个 friend template <class U> friend class B;行。

不幸的是,我不知道为什么这一行需要这样写。直觉上,我会期待像 friend class B<T> 这样的东西。 ,但是,这不会编译。

新引入的含义U也不清楚,因为A的和B的依赖类型是 T在这两种情况下。

因此,简而言之,如果您能就此行的语法是如何派生或推导出来的,我将不胜感激。

最佳答案

友元和模板有许多不同的排列方式。

您当前的代码使B任何 模板特化成为 friend A<T> ,例如 B<char>A<int>的 friend .

如果你只想匹配A<T>一个 friend ,你会这样说:

template <typename> class B;  // forward declare above!

template <typename T>
class A
{
// ...

friend class B<T>;
};

关于c++ - 试图理解 "template <class U> friend class B;"语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13713097/

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