C ++如何区分std :: cin到std :: ifstream?

问题描述 投票:1回答:2

我试图进行一个简单的比较,找出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
        }
    }     
};

我该怎么办?

谢谢!

c++ ifstream cin difference
2个回答
2
投票

由于std::cinstd::istream的一个实例,你可以比较两个对象的地址,看它们是否相等:

if (&is == &std::cin)

(Qazxswpoi)

但是我会考虑调查你是否可以在不这样做的情况下实现你的目标;基于流参数的标识的切换逻辑不是很干净,可能会抑制该项目的未来开发或维护。


0
投票

我不确定为什么你需要检查你是否有cin,但我有同样的问题,我的理由是:如果我有cin,这意味着我处于交互模式,所以我应该给一些有用的信息COUT。虽然检查cin的地址可能有希望总是有效,但我真的不相信它...

无论如何,我的解决方案是略微概括并添加一个合理默认值的额外参数

Demo

这给出了一个稍微更通用的功能,使用“指向参数的指针意味着可选参数”这个惯用法。如果由于某些其他原因需要cin,那么您还可以具体查看您需要哪些cin属性,以及如何确定您的输入流是否拥有它们。

© www.soinside.com 2019 - 2024. All rights reserved.