无法与 typedef 成为朋友:有啥特别的原因吗?

Posted

技术标签:

【中文标题】无法与 typedef 成为朋友:有啥特别的原因吗?【英文标题】:Not able to befriend typedefs: any particular reason?无法与 typedef 成为朋友:有什么特别的原因吗? 【发布时间】:2011-05-13 15:03:51 【问题描述】:
struct A ;
typedef A B;

struct C  friend struct B; ;

GCC 4.7.0 20110427 告诉我error: using typedef-name 'B' after 'struct'

到目前为止,这似乎是不言自明的;毕竟,我的示例代码试图声明一个名为 B 的 struct 并成为其好友,而实际上它不是 struct-key

但是,如果A 实际上是一个复杂、冗长的模板元黑客混乱,我必须写friend struct A;,这是不可取的。

我是否遗漏了什么,或者我们实际上可以 friend 通过类型别名进行类型吗?如果不是,是否有任何特殊原因,还是只是语言的怪癖?


This question 之前提出过这个问题,但已经过时,并且对有关 C++0x 的问题做出了似乎不正确的断言。 这个问题是关于 C++0x FDIS。

【问题讨论】:

***.com/questions/656948/… 可能是相关的。 哦,哈……这是我。大声笑.... 【参考方案1】:

你可以和任意类型成为朋友(对于非类类型,朋友声明将被忽略),但是你应该省略struct

struct A ;
typedef A B;

struct C  
  friend B; // equivalent: friend struct A;
            // equivalent: friend A;

  friend int; // ignored
;

【讨论】:

也许 GCC 4.7.0 和 GCC 4.5.1 还不支持这个? @Tomalak 是的,他们不支持这个。 啊,是的,Clang 2.9(主干 126116)似乎支持它。

以上是关于无法与 typedef 成为朋友:有啥特别的原因吗?的主要内容,如果未能解决你的问题,请参考以下文章

裴波那契数列是怎样的数列?有啥特别的地方

创建一个没有啥特别的 SOCKS 代理

typedef可以成为你的朋友

typedef有啥用?

有啥方法可以获取我的朋友或朋友的朋友的聊天数据? [关闭]

GraphQL 中的 `schema` typedef 有啥用?