In my code HeavyObjectManager
generates instances of HeavyObject
(which should never be copied), and i tried to make generation itself be customizeable by passing HeavyObjectGenerator
function.
class HeavyObject {
int x;
public:
HeavyObject(int x) : x(x) {}
HeavyObject &operator=(const HeavyObject &) = delete;
HeavyObject &operator=(HeavyObject &&) = delete;
};
using HeavyObjectGenerator = std::function<HeavyObject(int)>;
class HeavyObjectManager {
HeavyObjectGenerator heavyObjectGenerator;
HeavyObject heavyObject{0};
public:
void updateHeavyObject(int x) {
heavyObject = heavyObjectGenerator(x);
}
HeavyObjectManager(HeavyObjectGenerator gen) : heavyObjectGenerator(gen) {}
};
The problem is that this code needs HeavyObject
to have copy operator.
Which makes sense because std::function doesn’t know, maby i will try to return reference in HeavyObjectGenerator
and it will need copy constructor.
But in practice, i want HeavyObjectGenerator
to just construct HeavyObject
inside it and immediately return it, which won’t need copy operator nor move operator
What are my alternatives to implement what i want?