怎么把函数模板声明为一个类的友元?
时间: 2024-03-10 10:49:02 浏览: 52
在类的定义中,可以使用 `friend` 关键字来声明一个非成员函数或类成员函数为该类的友元函数。如果要将函数模板声明为一个类的友元,需要在声明函数模板时,将 `friend` 关键字放在函数模板的前面。
下面是一个示例代码,演示如何将函数模板声明为一个类的友元:
```c++
#include <iostream>
using namespace std;
template <class T>
class MyList {
public:
MyList(T*, int);
void showData();
template <class U>
friend void func(MyList<U>&);
private:
T* pData;
int len;
};
template <class T>
MyList<T>::MyList(T* pData, int len) {
this->pData = new T[len];
for (int i = 0; i < len; i++) {
this->pData[i] = pData[i];
}
this->len = len;
}
template <class T>
void MyList<T>::showData() {
for (int i = 0; i < len; i++) {
cout << pData[i] << " ";
}
cout << endl;
}
template <class U>
void func(MyList<U>& list) {
cout << "The data in the list is: ";
list.showData();
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
MyList<int> list(arr, 5);
func(list);
return 0;
}
```
在上面的代码中,函数模板 `func` 被声明为类 `MyList` 的友元。在 `main` 函数中,我们创建了一个 `MyList` 类型的对象 `list`,并将其作为参数传递给了 `func` 函数。由于 `func` 函数是 `MyList` 类的友元,因此可以直接访问 `list` 对象的私有成员函数 `showData`。在 `func` 函数中,我们调用了 `list.showData()` 来输出 `list` 对象中存储的数据。
阅读全文