Jor*_*dan 8 c++ cout ofstream ostream
在C++中有没有办法检查ostream对象是对象cout还是ofstream对象?
就像是:
ostream& output(ostream& out)
{
if (out == cout)
return out;
else
{
out << "something different because its not going to the console" << endl;
return out;
}
}
我想这样做的原因是,我想重载<<运算符以执行两个不同的操作,具体取决于它使用的流类型.
是否有可能<<每次使用不同类型的流重载操作员两次?
更新以更好地反映意图.
seh*_*ehe 10
通过检查streambuffer身份,你一定会更进一步
if (s.rdbuf() == std::cout.rdbuf())
Run Code Online (Sandbox Code Playgroud)
这是因为将流交叉分配/别名到缓冲区非常简单,请参阅http://www.cplusplus.com/reference/iostream/ios/rdbuf/和Josuttis的书
听起来您真正想知道的不是流是否是 cout 而是底层文件描述符是否附加到终端?如果是这样,您需要底层文件描述符。不幸的是,您无法从 iostream 中获得它。如果可以使用 cstdio 而不是 iostream,那么您可以。如果您确实有文件描述符,那么确定您是否正在写入终端很简单,就像查看 tcgetattr() 是否返回 -1 一样。
另外,不要让任何人告诉您不要实现您需要的某些功能,因为它会玷污某些泄漏抽象的纯度。如果你真的需要不同的行为,那么做你需要做的事情来产生那个功能。
可以通过检查流的“身份”来实现if ( &out == &cout ) ...:
但是,我对这个测试的实用性表示怀疑。如果您的函数可以处理任何输出流,为什么还要关心它使用的是什么流呢?
| 归档时间: |
|
| 查看次数: |
5596 次 |
| 最近记录: |