C++ 模板参数作为朋友
在C++03中,以下内容是非法的,尽管有些编译器支持它C++ 模板参数作为朋友,c++,templates,c++11,friend,C++,Templates,C++11,Friend,在C++03中,以下内容是非法的,尽管有些编译器支持它 template <class T> class X { friend T; }; 模板 X类 { 朋友T; }; 这在C++11中合法化了吗?(对不起,我自己没有时间看草稿,只是希望有人知道这一点)是的,c++0x允许模板参数成为朋友 嗯,我碰巧记得以前在草稿中读过,但找不到参考资料。总之,@Praetorian的回答很准确。来自N3291的§11.3,3节: template <typename T>
template <class T>
class X
{
friend T;
};
模板
X类
{
朋友T;
};
这在C++11中合法化了吗?(对不起,我自己没有时间看草稿,只是希望有人知道这一点)是的,c++0x允许模板参数成为朋友
嗯,我碰巧记得以前在草稿中读过,但找不到参考资料。总之,@Praetorian的回答很准确。来自N3291的§11.3,3节:
template <typename T> class R {
friend T;
};
R<C> rc; // class C is a friend of R<C>
R<int> Ri; // OK: "friend int;" is ignored
模板类R{
朋友T;
};
R rc;//C班是R的朋友
R Ri;//OK:“friend int;”被忽略
<> P> >在C++ 11中是合法的。 < P>在普通C++中是非法的,但有一个简单的解决方案
template <class T>
class X
{
private:
class Wrapper
{
public:
typedef T Type;
};
friend class Wrapper::Type;
};
模板
X类
{
私人:
类包装器
{
公众:
T型;
};
友元类包装器::类型;
};
<代码> C++是正确的。是给Facebook的。@Ken:我很高兴它不是为了电视节目xDI很高兴friend int代码>被忽略:)在gcc上有效,但在VC2010和ComeauYeah上不起作用,在Clang上也尝试过,但没有起作用:(-显然标准禁止与gcc不检查的typedef'd类型交朋友。但是允许编写gcc不识别的friend t;
,但Clang可以。