如何实现一个可用于同时接收左值与右值的cout <<重载?
2024-04-10 阅读 12
要实现一个既能接收左值又能接收右值的 `cout <<` 重载,可以使用函数模板和引用折叠。下面是一个示例代码:
```cpp
#include
// 定义一个模板函数
template
void mycout(T&& arg) {
std::cout << std::forward(arg);
}
// 使用引用折叠,实现同时接收左值和右值
template
void mycout(T&& arg, Args&&... args) {
std::cout << std::forward(arg);
mycout(std::forward(args)...);
}
int main() {
mycout("Hello, ", 123, " World!\n");
return 0;
}
```
在这个示例中,我们使用了函数模板 `mycout` 来实现重载。第一个函数模板接收单个参数,用于处理最后一个参数的输出;第二个函数模板使用引用折叠,递归地处理剩余的参数。这样就实现了同时接收左值和右值的 `cout <<` 重载。
更新于 2024年11月21日