9

考虑以下:

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;
}

有没有办法在不将成员ifoo移动到一个公共基类或做一些疯狂的事情作为添加朋友类 A<1>的情况下使 'other.i' 可见?

也就是有没有办法让同一个模板类的模板做朋友呢?

4

1 回答 1

10

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

template<int N2> friend class A;

应该成为 A 的所有实例的朋友。

于 2012-12-07T21:45:13.767 回答