【问题标题】:Friendship Throughout Same Template Class同一个模板类的友谊
【发布时间】:2012-12-07 21:40:26
【问题描述】:

考虑以下几点:

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 感到疯狂吗?

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

【问题讨论】:

  • 这段代码应该没有问题。
  • 除非因为我是私人的所以它不起作用......
  • 很好奇,GCC 同意,但我可以发誓这是完全合法的。哦,好吧。
  • 我通常会在发布之前尝试我的代码;)
  • “同一个模板类中的友谊”...让我们周围有友谊!

标签: c++ templates c++11


【解决方案1】:

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

template<int N2> friend class A;

应该为 A 的 所有个实例加好友。

【讨论】:

  • 我该死的,c++11 到了resque。
  • @JensÅkerblom resqueue FTFY?
  • 你确定这个功能来自 c++11 吗? (老gcc 4.3.4 似乎接受了)。
  • @JesseGood:这是一个常见的扩展。此外,如果我记得的话,gcc 4.3.4 支持除了 this-rvalue refs(早期版本)之外的一些 C++11 功能。
  • 我做了一些挖掘,发现未被接受的答案to this SO question很好地解释了它。所以,它是 C++03 的一部分,但有一个缺陷报告 about it。 (反正我不知道的事情 +1)。
猜你喜欢
  • 2014-09-30
  • 2021-12-06
  • 1970-01-01
  • 2021-10-30
  • 1970-01-01
  • 2012-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多