c++ - 使类模板成为其自身的 friend 以进行不同的实例化

标签 c++ templates friend

<分区>

我想制作 A<T> A<T2>的 friend 对于任何类型 TT2 .

这可能吗?

谢谢。

测试(也在 godbolt.org ):

template <class T>
class A {
public:
    template <typename T2> void test(A<T2>& a) { a.v_ = 2;}
private:
    int v_;
    template <typename T2> friend A;
};

int main() {
    A<int> a;
    A<int> b;
    b.test(a);
    return 0;
}

编译器错误:

<source>:7:28: error: friend type templates must use an elaborated type

    template <typename T2> friend A;

                           ^~~~~~~~

最佳答案

应该是

template <typename T2> friend class A;

关于c++ - 使类模板成为其自身的 friend 以进行不同的实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50298142/

相关文章:

c++ - 如何仅在实际使用成员模板时才在成员模板中进行 static_assert?

c++ - 具有定义的友元函数 - 模板还是非模板?

c++ - 在 C++ 中使用友元函数

c++ - 类模板显式实例化声明

c++ - 使用标准 C++/C++11、14、17/C 检查文件是否存在的最快方法?

c++ - Boost.Asio 上下文与 TLS v.1.2 和 SSL v.3 电子邮件客户端 : ssl3 alert unexpected message

c++ - 添加更多代码会使代码无法编译

c++ - 使用 NetBeans 在 C++ 静态库项目中进行测试

C++ 方法参数可以是原语或对象

c++ - 接受一个或两个参数的模板函数