gpt4 book ai didi

c++ - 为什么我不能通过 typedef 声明 friend ?

转载 作者:IT老高 更新时间:2023-10-28 22:05:07 25 4
gpt4 key购买 nike

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

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

最佳答案

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

friend class T;

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

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

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

关于c++ - 为什么我不能通过 typedef 声明 friend ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/392120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com