模板输出流函数作为类模板的友元函数
时间: 2023-12-28 13:05:43 浏览: 26
类模板的友元函数可以是模板函数,也可以非模板函数。对于模板输出流函数作类模板的友元函数,这样实现:
```cpp
template <typename T>
class MyClass {
public:
MyClass(T data) : data(data) {}
template <typename U>
friend std::ostream& operator<<(std::ostream& os, const MyClass<U>& obj);
private:
T data;
};
template <typename U>
std::ostream& operator<<(std::ostream& os, const MyClass<U>& obj) {
os << obj.data;
return os;
}
```
在上面的代码中,`MyClass` 是一个类模板,它有一个模板参数 `T`。在类模板中声明了一个友元函数 `operator<<`,它也是一个模板函数,并且是标准库中的输出流重载运算符。这个友元函数接受一个输出流对象 `os` 和一个 `MyClass` 对象 `obj` 的引用作为参数。
在友元函数的实现中,我们可以直接访问 `MyClass` 类的私有成员 `data`,并将其输出到 `os` 流中。
这样,我们就可以像使用普通类对象一样使用 `MyClass` 类模板,并将其输出到输出流中,例如:
```cpp
MyClass<int> obj(42);
std::cout << obj << std::endl; // 输出: 42
```
注意,以上实现只是一个示例,实际应用中可能需要根据具体需求进行适当的修改。