我正在尝试创建一个控制台类。我想包装 cin
和 cout
在类里面重载 <<
和 >>
运营商。所以我可以这样使用类:
// Output
Console << "Call cout from Console" << endl;
// Input
string str;
Console >> str; // Call cin
我最好的猜测是:
class Console {
//...
public:
ostream& operator<< (ostream& os)
{
cout << os;
return &cout;
}
//...
};
但我知道那是错误的,我怎么能重载运算符以将控制台类同时用作 cin
和 cout
?
最佳答案
我得到了一个可以处理流操纵器的工作代码。你可以看到我的代码在运行 in this Ideone page
代码如下:
#include <iostream>
typedef std::ostream& (*manip) (std::ostream&);
class console {
};
template <class T> console& operator<< (console& con, const T& x) { std::cout << x; return con; }
template <class T> console& operator>>(console& con, T& x) { std::cin >>x; return con; }
console& operator<< (console& con, manip manipulator){ std::cout<<manipulator; return con;}
int main() {
console c;
int a,b;
c>>a>>b;
c << "hello world"<<std::endl<<std::hex<<(a+b)<<std::endl;
}
感谢@MooingDuck 的讨论让我找到了可行的答案,感谢@111111 作为起点。
关于C++ 在类中包装 cin 和 cout - 重载 << 和 >> 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12433055/