c++类模板中的友元函数
时间: 2023-08-27 21:14:47 浏览: 153
模板类友元函数的一个例子
3星 · 编辑精心推荐
C++类模板中的友元函数与非模板类的友元函数类似,可以访问类的私有成员和保护成员。但是,模板类的友元函数需要在函数名前加上 `template <typename T>`,其中 `T` 是模板参数的占位符,表示该友元函数是一个模板函数。
例如,定义一个模板类 `MyClass`,并声明一个友元函数 `template <typename T> void myFunc(MyClass<T>& obj)`,其中 `T` 是模板参数。在函数体中,可以直接访问 `MyClass` 的私有成员和保护成员,例如:
```cpp
template <typename T>
class MyClass {
private:
T data;
public:
friend void myFunc<>(MyClass<T>& obj);
};
template <typename T>
void myFunc(MyClass<T>& obj) {
obj.data = T(); // 访问 MyClass 的私有成员
}
```
需要注意的是,在模板类中声明友元函数时,需要在类外显式实例化该函数模板,例如:
```cpp
template void myFunc<int>(MyClass<int>& obj);
```
这样才能保证编译器能够正确地匹配模板参数。
阅读全文