模板类的友元功能
Friend funcitons of template classes
我想使用友元函数返回一个嵌套的类对象
template <typename T>
class X{
public:
class Y{
public:
int y;
}test;
public:
X(){
test.y=10;
}
template <typename U>
friend Y fun(X<U>);
};
template <typename T>
X<T>::Y fun(X<T> x){
return x.test;
}
但是我收到一个错误说
在"X::Y"之前需要"类型名",因为"X"是依赖范围
怎么了?
您需要
按照错误所说的字面意思进行操作: 把typename
放在X<T>::Y
之前:
template <typename T>
typename X<T>::Y fun(X<T> x){
return x.test;
}
因为X<T>::Y
的含义取决于T
,编译器一般不能知道X<T>::Y
指的是类型名还是变量。在这种情况下,规则是,如果您希望它是类型名,则必须使用 typename
关键字明确表示。
你必须写
template <typename T>
typename X<T>::Y fun(X<T> x){
return x.test;
}
Becouse Compliler 无法解析Y
是归档还是类型。
相关文章:
- C++模板来检查友元函数的存在
- 模板类无法识别友元运算符
- 如何使用单独文件中的派生类访问友元函数对象
- 模板化的类和友元函数
- 为什么创建友元类的实例会导致"undefined reference to"错误?
- 如何在嵌套类中正确使用友元声明?
- 友元函数无法访问私有数据成员 (c++)
- 继承和友元函数,从基类访问受保护的成员
- 将子类方法声明为基类的友元
- 如何在友元函数中使用静态成员而不添加前缀 [类名]::
- 在将函数声明为友元时,尖括号的含义是什么?
- 在模板类之外定义友元函数的正确方法是什么?
- 2个模板化类的非模板友元函数未定义引用错误
- 如何启用友元类的友元功能直接在C++中访问其私有成员
- 模板类的友元功能
- 具有自动和友元功能的返回类型匹配
- C++ <<运算符重载,无友元功能
- 一个非成员函数如何实现一个类的友元函数的功能
- 前向声明和友元功能
- 跨多个文件的友元功能