[core] Store pointer instead of referect to the Object in ActorRef

GCC complains about implicitly deleted assigment constructor
when trying to do this:

void setResourceTransform(optional<ActorRef<ResourceTransform>> transform) {
    resourceTransform = transform;
}

optional<ActorRef<ResourceTransform>> resourceTransform;
This commit is contained in:
Thiago Marcos P. Santos
2017-06-21 20:44:26 +03:00
parent 6beccef517
commit 515ffa975d

View File

@@ -24,19 +24,19 @@ template <class Object>
class ActorRef {
public:
ActorRef(Object& object_, std::weak_ptr<Mailbox> weakMailbox_)
: object(object_),
: object(&object_),
weakMailbox(std::move(weakMailbox_)) {
}
template <typename Fn, class... Args>
void invoke(Fn fn, Args&&... args) {
if (auto mailbox = weakMailbox.lock()) {
mailbox->push(actor::makeMessage(object, fn, std::forward<Args>(args)...));
mailbox->push(actor::makeMessage(*object, fn, std::forward<Args>(args)...));
}
}
private:
Object& object;
Object* object;
std::weak_ptr<Mailbox> weakMailbox;
};