Вот рецепт способа создания пользовательского объекта потока, который можно сделать, унаследовав std::stringbuf
class MyStreamBuf : public std::stringbuf {
//... override some functions from stringbuf (eg. sync) to change behavior
};
class MyInputStream : public std::istream {
MyStreamBuf buf_;
public:
MyInputStream : std::istream(&buf_){
}
//... add more interface here, etc.
}
Исходя из этого, вы должны иметь возможность выполнить то, что вы просили.