Я пытаюсь реализовать эту логику в C ++:
Object obj(args);
while (obj.isOK()) {
obj = obj.next();
}
Но я не могу использовать этот точный код, потому что Object
наследуется boost::noncopyable
поэтому он не имеет оператора присваивания. Я могу добавить методы и конструкторы Object
(но не сделать его копируемым), однако я бы предпочел не делать этого. Другие вопросы имеют ручное уничтожение и размещение нового в качестве решения, которое я мог бы сделать, если бы я создал новый конструктор для Object
, но, опять же, желательно, чтобы мне не понадобился новый конструктор, и это все равно кажется довольно неприятным решением. Какие у меня есть альтернативы?
Делать Object::next
мутировать Object
на месте. поскольку Object
не копируется, это кажется единственной разумной вещью для Object::next
делать в любом случае.
Что значит Object::next
вернуть?
Если он возвращает свежий Object
Вы можете добавить оператор присваивания Object
:
Object& operator=(Object&& obj)
{
//move its iternal state to this and then
return *this;
}
Таким образом, дублирование данных не происходит, и на самом деле ничего не копируется.