同一模板类的友谊

Friendship Throughout Same Template Class

本文关键字:友谊      更新时间:2023-10-16

请考虑以下事项:

template<int N>
class A
{
public:
    A() : i(N) {}
    template<int K>
    void foo(A<K> other)
    {
        i = other.i; // <-- other.i is private
    }
private:
    int i;
};
int main()
{
    A<1> a1;
    A<2> a2;
    a1.foo(a2);
    return 0;
}

有没有办法使"other.i"可见,而无需将成员 ifoo 移动到公共基类或做一些疯狂的事情,例如添加朋友类 A<1>

也就是说,有没有办法让相同模板类的模板成为朋友?

C++03 没有为此提供机制,但 C++11 提供了机制。

template<int N2> friend class A;

应该与 A 的所有实例交朋友。