我试图进行一个简单的比较,找出istream是std :: cin还是std :: ifstream。
我的伪代码是这样的:
class myclass
{
public:
void write(istream& is)
{
if(is == cin) // this does not work
{
//do something
}
else
{
//do something else
}
}
};
我该怎么办?
谢谢!
由于std::cin
是std::istream
的一个实例,你可以比较两个对象的地址,看它们是否相等:
if (&is == &std::cin)
(Qazxswpoi)
但是我会考虑调查你是否可以在不这样做的情况下实现你的目标;基于流参数的标识的切换逻辑不是很干净,可能会抑制该项目的未来开发或维护。
我不确定为什么你需要检查你是否有cin,但我有同样的问题,我的理由是:如果我有cin,这意味着我处于交互模式,所以我应该给一些有用的信息COUT。虽然检查cin的地址可能有希望总是有效,但我真的不相信它...
无论如何,我的解决方案是略微概括并添加一个合理默认值的额外参数
Demo
这给出了一个稍微更通用的功能,使用“指向参数的指针意味着可选参数”这个惯用法。如果由于某些其他原因需要cin,那么您还可以具体查看您需要哪些cin属性,以及如何确定您的输入流是否拥有它们。