내가 하스켈과 일반적으로 기능적인 언어로 많은 일을 한 후 C++를 배우고, 그리고 내가 지속적으로 같은 문제를 해결하기 위해 노력하고 있음을 발견C++에서 사용자 정의 스트림 변환을 작성하려면 어떻게해야합니까?
- 이 입력 스트림에서 일부 데이터를 읽기를
- 들이 특정 알고리즘을 기반으로 토큰 화
- 프로세스 토큰
이 하스켈 인 경우, 단순히 모든 게으른이라는 사실을 활용 수 있고, 그것에 대해 생각하는 나의 변화를 작성한 다음 그것은 g가 될 것이다. 다운 스트림이 소비됨에 따라 적용된다. 이 정확한 패턴 (conduit 및 pipes)을 수행하는 라이브러리조차 있습니다.
시퀀스 1 2 3 4 5 6 ...
을 출력하고 12 34 56 ...
을 출력한다고 가정 해 보겠습니다. 스트림에서 작동하고 해당 위치에서 데이터를 처리하는 임시 코드를 작성하는 방법을 볼 수 있습니다. 그러나 다른 스트림에서 데이터를 (생각할 수있는 방식으로) 변형하여 새 스트림을 만들 수있는 추상화 메커니즘이있는 경우 을 알고 싶습니다.이 추상화는 하나의 요소를 새로운 값으로 간단히 매핑하는 것이 아니라 처리 할 때 데이터를 버퍼링 할 수 있어야합니다.
다음은 제한 사항 :
- 내가 다음 stdlib 이외의 다른 라이브러리를 사용할 수 없습니다.
- 그것은 C++ 03에서 작동하는 (어떤 C++ 11 기능을 의미하지 않습니다.)
당신이 생각하는 경우 이는 숙제가? 음, 나는 데이터 스트림으로 작업해야하는 많은 클래스 할당을 얻고있다. (이는 라이브러리가없고, C++ 03 제한 인 의 이유이다). 그것은 내가 루프를 사용하여 while
루프를 사용하여 이것을 어떻게 해야할지 모르겠지만, 난 그냥 stl에 기존의 스트림 추상화가 있다면, 그냥 발견하고 사용 기다리고 싶습니다.
그러나이 작업을 수행하는 유일한 방법은 C++ 11을 사용하는 것이지만 알고 싶습니다.
내가 알고있는 기성품 패키지가 없습니다. 아마도'std :: istream_iterator'와 함께 사용되는 커스텀 클래스 타입일까요? –
@ T.C. 흠, 그게 내가 원하는거야. 내가 올바르게 이해한다면 입력 스트림을 필요로하는 출력을 생성하는 커스텀 반복자를 구현할 것입니다. 하나의 이터레이터를 사용하여 다른 이터레이터를 만들고 싶다면 (컴포지션을 생각해보십시오) 어떻게해야합니까? –
['std :: istream_iterator'] (http://en.cppreference.com/w/cpp/iterator/istream_iterator)와 함께 사용되는 사용자 정의 스트림 추출 연산자가있는 클래스에 대해 생각하고있었습니다. 컴포지션에 관해서는, 당신 자신의 반복자 어댑터를 작성해야합니다. –