2014-10-14 1 views
0

istream이 std :: cin 또는 std :: ifstream인지 찾기 위해 간단한 비교를 시도하고 있습니다.C++ std :: cin과 std :: ifstream을 어떻게 구별 할 것인가?

class myclass 
{ 
public: 
    void write(istream& is) 
    { 
     if(is == cin) // this does not work 
     { 
      //do something 
     } 
     else 
     { 
      //do something else 
     } 
    }  
}; 

내가 어떻게 진행할 수 :

내 의사는 같은 것입니다?

감사합니다. 당신이 할 수있는 경우

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

(Demo)

내가 조사이라고 생각하지만 : std::cin 이후

+2

'std :: istream &'을 사용하는 것이 최선의 선택 인 것 같지 않습니다. 함수에 오버로드. 정말로, 그러나 행동을 바꾸는 것은 조금 의심스러워 보입니다. – chris

+0

@chris 어떻게 오버로드가 도움이 될까요? 'std :: cin'은'std :: istream'의 인스턴스입니다. 어떤 과부하가'std :: cin'을 탐지 할 것인가? – cdhowie

+0

@cdhowie, 나는 더 많은'std :: ifstream'을 생각해 냈습니다. OP는 'std :: cin'이 특별히 특별하다는 것을 나타내지 않는 것 같아요. 단지 그들 사이를 구별 할 필요가 있습니다. 파일 스트림과 다른 스트림이 완벽하지 않다는 것을 알고 있습니다. – chris

답변

1

은 동일한 경우 당신이보고 두 객체의 주소를 비교할 수, std::istream의 인스턴스 이렇게하지 않고 목표를 달성하십시오. 스트림 논증 (stream argument)의 신원에 기초한 스위칭 논리는 매우 깨끗하지 못하며이 프로젝트의 향후 개발 또는 유지 보수를 방해 할 수있다.

+0

완벽하게 작동합니다! 내가 제일 좋은 방법을 찾으려고 노력할거야, 고마워! – marquesm91