ASCII 문자열에 대한 상수 char* 포인터가 주어지면 데이터를 읽는 솔루션을 고안할 수 있습니까? 마치 파일에서 스트리밍하는 것처럼요? 중요한 요구 사항은 데이터가 수정되지 않은 상태로 유지되어야 한다는 것입니다.
해결책은 사용자 정의 스트림 버퍼를 생성하는 데 있습니다. 사용자 정의 구현은 다음과 같습니다.
#include <streambuf> #include <istream> struct membuf: std::streambuf { membuf(char const* base, size_t size) { char* p(const_cast<char*>(base)); // Casting for interface compatibility this->setg(p, p, p + size); } }; struct imemstream: virtual membuf, std::istream { imemstream(char const* base, size_t size) : membuf(base, size) , std::istream(static_cast<std::streambuf*>(this)) {} };
이 사용자 정의 버퍼를 사용하면 상수 데이터를 감싸는 입력 스트림을 생성할 수 있습니다.
// data points to a string "42 3.14 blah" imemstream in(data, data_size); int x; float y; std::string w; in >> x >> y >> w;
이 접근 방식을 사용하면 복사가 필요한 문자열 스트림과 달리 원본 데이터를 변경하지 않고 상수 메모리에서 읽을 수 있습니다.
위 내용은 사용자 정의 스트림 버퍼를 사용하여 마치 파일에서 스트리밍하는 것처럼 상수 메모리에서 데이터를 읽을 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!