无法与 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 成为朋友:有啥特别的原因吗?的主要内容,如果未能解决你的问题,请参考以下文章