C ++에서 일반적인 istream을 선언합니다
문제
런타임에 프로그램에 전달 된 매개 변수에 따라 ifstream 또는 CIN에서 읽는 프로그램을 작성해야합니다.
나는 다음을 계획하고 있었다.
istream in;
if(argv[1] == "cin")
{
in = cin;
}
else
{
ifStream inFile;
inFile.open(argv[1].c_str());
in = inFile;
}
그러나 보호 된 Istream은 Istream을 선언 할 수 없습니다. 그러한 일반적인 스트림을 선언 할 수있는 방법이 있습니까?
해결책
시도해보십시오 istream*
대신에. 그러나 코드를 약간 변경해야합니다. 포인터를 사용하면 가리키는 물체의 메모리 영역을 유지해야합니다. 다시 말해서, "infile"변수는 다른 사람이 존재하지 않기 때문에 선언 할 수 없습니다. 코드는 다음과 같습니다.
istream* in;
ifStream inFile;
if(!strcmp(argv[1],"cin"))
{
in = &cin;
}
else
{
inFile.open(argv[1]);
in = &inFile;
}
// use *in
(문자열 처리의 수정 사항도 참고합니다. 예로서 수정했습니다.)
다른 팁
대체 디자인은 코드를 사용하여 작성하는 것입니다 cin
, 그런 다음 사용합니다 입력 리디렉션 파일에서 입력을 수락하려는 경우 프로그램을 실행할 때. 이것은 당신의 정확한 질문에 대답하지는 않지만, 당신이 제시 한 경우에 대한 더 간단한 디자인입니다.
예를 들어, 대신
program.exe cin
당신은 방금 달릴 것입니다
program.exe
그리고 대신
program.exe myfile.txt
당신은 달릴 것입니다
program.exe < myfile.txt
이것은 *nix와 Windows에서 작동합니다.
포인터 없이도이 작업을 수행 할 수 있습니다.
ifStream inFile;
istream in( argv[1] == "cin" ? cin : inFile.open(argv[1]));
제휴하지 않습니다 StackOverflow