Так как по дизайну невозможно std::ostream
, вопрос становится следующим: как можно перемещать std::ostream
так, чтобы он мог писать разные направления?
Основная задача состоит в том, чтобы иметь функцию factory, которая принимает URI и что-то возвращает, позвольте ей, omstream
(выводить подвижный поток), который может использоваться как std::ostream
:
omstream stream_factory(std::string const& uri);
void process(std::ostream& out);
int main(int ac, char* av[]) {
omstream destination{ stream_factory(ac == 2? av[1]: "example.txt") };
process(destination);
}
omstream
будет отвечать за правильное перемещение объекта:
class omstream
: public std::ostream {
// suitable members
public:
omstream(/* suitable constructor arguments */);
omstream(omstream&& other) // follow recipe of 27.9.1.11 [ofstream.cons] paragraph 4
: std:ios(std::move(other))
, std::ostream(std::move(other))
// move any members {
this->set_rdbuf(/* get the stream buffer */);
}
// other helpful or necessary members
};
Вопрос в том, что нужно для реализации omstream
(или даже соответствующего шаблона класса basic_omstream
)?