模板友元声明中的作用域和前置声明问题

C++语言 码拜 9年前 (2015-11-26) 1246次浏览
// forward declaration necessary to be friend a specific instantiation of a template 
template <typename T> class Pal; 
class C {  
    friend class Pal<C>;  
    template <typename T> friend class Pal2; 
}; 
template <typename T> class C2 
{
    friend class Pal<T>;  
    // a template declaration for Pal must be in scope   
    //上面这句注释的在作用域内是什么意思?Pal的模板声明明明在class C2的外面
    friend class Pal3; //为什么不需要Pal3的前置声明?
};
解决方案:20分
1) friend declaration 可以在声明友元的同时,声明一个类/函数。(如果 name lookup 没有找到被声明为友元的类/函数的话)
2) 模板的特化不能在没有类模板的声明的情况下被单独声明。(所以,任何时候如果要使用模板的特化,必须保证至少可以看到模板的声明)
3) 所谓 in scope ,不是说与它在同一个 scope ,可是指在当前 scope 可以通过 name lookup 找到。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明模板友元声明中的作用域和前置声明问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)