Я создаю C++ istream
с пользовательским streambuf
. Пытаться переместить это не удается, потому что конструктор перемещения istream защищен. Чтобы обойти это я вывел класс от istream
:Перемещение класса, полученного из istream
struct VectorCharBuf : public streambuf {
VectorCharBuf(vector<char>& v) {
setg(v.data(), v.data(), v.data() + v.size());
}
};
struct IVectorCharStream : public istream {
IVectorCharStream(VectorCharBuf* contents_buf) : istream(contents_buf) {}
};
конструктор двигаться по умолчанию для этого класса не создается, поскольку он предполагает использование удаленной функции «СТД :: basic_ios < _CharT в
, _Traits> :: basic_ios (const std :: basic_ios < _CharT, _Traits> &) [с _CharT = char; _Traits = станд :: char_traits]
Кроме того, если я пытаюсь объявить конструктор перемещения явно, как в
struct MyIStream : public istream {
MyIStream(MyIStream&& str) : istream(move(str)) {}
};
Я получаю ошибку „недопустимое использование пустого выражения“. (Я, наверное, делаю что-то глупое в этом последнем случае, но я просто не могу это заметить ...)
Как создать подвижный istream
?
Почему вы пытаетесь перенести фактический 'std :: istream' в первую очередь? Это вряд ли звучит полезно. –
@BaummitAugen, поэтому вы можете его инициализировать с помощью 'auto variable = MyIstream {};'? – utnapistim
Тогда что вы собираетесь делать с 'переменной'? 'std :: istream' - это просто базовая база, она фактически не делает ничего полезного сама по себе. –