Альтернатива std::function, которая возвращает объект с удаленным оператором копирования.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Альтернатива std::function, которая возвращает объект с удаленным оператором копирования.

Сообщение Anonymous »

В моем коде HeavyObjectManager генерирует экземпляры HeavyObject (которые никогда не следует копировать), и я попытался сделать саму генерацию настраиваемой, передав функцию HeavyObjectGenerator.

Код: Выделить всё

class HeavyObject {
int x;
public:
HeavyObject(int x) : x(x) {}

HeavyObject &operator=(const HeavyObject &) = delete;
HeavyObject &operator=(HeavyObject &&) = delete;
};

using HeavyObjectGenerator = std::function;

class HeavyObjectManager {
HeavyObjectGenerator heavyObjectGenerator;

HeavyObject heavyObject{0};
public:
void updateHeavyObject(int x) {
heavyObject = heavyObjectGenerator(x);
}
HeavyObjectManager(HeavyObjectGenerator gen) : heavyObjectGenerator(gen) {}
};
Проблема в том, что этому коду нужен HeavyObject, чтобы иметь оператор копирования.
Это имеет смысл, потому что std::function не знает, мэйби Я попытаюсь вернуть ссылку в HeavyObjectGenerator, и для этого потребуется конструктор копирования.
Но на практике я хочу, чтобы HeavyObjectGenerator просто создавал HeavyObject внутри его и немедленно вернуть, для чего не потребуется ни оператор копирования, ни оператор перемещения.
Каковы мои альтернативы для реализации того, что я хочу?

Подробнее здесь: https://stackoverflow.com/questions/784 ... y-operator
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»