자체가 당신을 제공하는 스트림 개체에 대한 참조를 반환 I/O 작업의 유효성을 확인하는 훌륭한 방법입니다. 작업이 실패하면 스트림 개체가 실패 상태에 있으며 이는 부울 컨텍스트에서 false
으로 평가됨을 의미합니다. 따라서 우리가 쓸 수 있습니다 : 두 번째 예에서는 특히 반복 호출
while (std::getline(instream, str)) { /* ... process line ... */ }
if (anotherstream >> x >> y) { /* process x and y */ }
else { /* error, at least one extraction failed */ }
if (!laststream.read(buf, sizeof(buf)) { /* error */ }
참고 : 각 추출 스트림 객체에 대한 참조를 반환하고, 그래서 우리는 하나의 명령문에서 여러 추출을 연결할 수 있으며, 어떤의 경우 실패하면 전체 작업이 false
으로 평가됩니다. 여기
은 표준 입력에서 양식
[x y z]
의 라인을 구문 분석, 실제 예제 :
for (std::string line; std::getline(std::cin, line);)
{
std::istringstream iss(line);
char l, r;
double x, y, z;
if (!(iss >> l >> x >> y >> z >> r) || (l != '[') || (r != ']'))
{
std::cerr << "Malformed line ('" << line << "'), skipping.\n";
continue;
}
std::cout << "You said: " << x << ", " << y << ", " << z << std::endl;
}
http://en.wikipedia.org/wiki/Method_chaining – Corbin
이 허용 않는 한 가지는 호출의 체인입니다 오버로드 된 리디렉션 연산자를 포함합니다. 나는 사용자에게 몇 가지 flexibile 옵션을 사용하기 때문에 권장 사항을 따르는 것이 좋습니다. –