当前位置:  开发笔记 > 编程语言 > 正文

为什么我不能通过typedef声明朋友?

如何解决《为什么我不能通过typedef声明朋友?》经验,为你挑选了1个好方法。

有谁知道为什么类名的typedef不像朋友声明的类名那样工作?

class A
{
public:
};

class B : public A
{
public:
   typedef A SUPERCLASS;
};

typedef A X;

class C
{
public:
   friend class A;             // OK
   friend class X;             // fails
   friend class B::SUPERCLASS; // fails
};

Johannes Sch.. 9

目前它不能.我不知道原因(只是查找它,因为我发现它很有趣).更新:您可以在第一个提案中找到支持typedef-names为朋友的原因:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1520.pdf.原因是标准仅支持详细类型说明符.很容易只允许那些,并且如果声明为expert的实体尚未声明,它将成为周围命名空间的成员.但这意味着如果你想使用模板参数,你必须这样做(例如,需要一个类)

friend class T;

但这带来了额外的问题,并认为不值得获益.现在,本文建议允许给出其他类型说明符(这样就可以使用模板参数和typedef-names).

下一个C++版本(由于2010年)将能够做到这一点.

请参阅此标准的更新提案:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1791.pdf.它不仅允许typedef名称,还允许将模板参数用作声明为friend的类型.



1> Johannes Sch..:

目前它不能.我不知道原因(只是查找它,因为我发现它很有趣).更新:您可以在第一个提案中找到支持typedef-names为朋友的原因:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1520.pdf.原因是标准仅支持详细类型说明符.很容易只允许那些,并且如果声明为expert的实体尚未声明,它将成为周围命名空间的成员.但这意味着如果你想使用模板参数,你必须这样做(例如,需要一个类)

friend class T;

但这带来了额外的问题,并认为不值得获益.现在,本文建议允许给出其他类型说明符(这样就可以使用模板参数和typedef-names).

下一个C++版本(由于2010年)将能够做到这一点.

请参阅此标准的更新提案:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1791.pdf.它不仅允许typedef名称,还允许将模板参数用作声明为friend的类型.

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有