Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 模板参数作为朋友_C++_Templates_C++11_Friend - Fatal编程技术网

C++ 模板参数作为朋友

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>

在C++03中,以下内容是非法的,尽管有些编译器支持它

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可以。