Можно ли использовать наследование с типизированными акторами в C ++ Actor Framework?

C ++ Actor Framework позволяет строго типизировать актеров. Поддерживает ли каркас наследование с типизированными актерами?

2

Решение

Да — экземпляр typed_actor можно рассматривать как другой тип typed_actor, если новый тип отвечает на подмножество сообщений, поддерживаемых этим экземпляром. Вот пример, где c_type / C является супертипом a_type и b_type:

#include <iostream>
#include "caf/all.hpp"
using namespace caf;
using namespace std;

using a_type = typed_actor<replies_to<int>::with<void>>;
using b_type = typed_actor<replies_to<double>::with<void>>;
using c_type = a_type::extend<replies_to<double>::with<void>>;

class C : public c_type::base
{
protected:
behavior_type make_behavior() override
{
return
{
[this](int value)
{
aout(this) << "Received integer value: " << value << endl;
},
[this](double value)
{
aout(this) << "Received double value: " << value << endl;
},
after(chrono::seconds(5)) >> [this]
{
aout(this) << "Exiting after 5s" << endl;
this->quit();
}
};
}
};

void testerA(const a_type &spawnedActor)
{
scoped_actor self;
self->send(spawnedActor, 5);
}

void testerB(const b_type &spawnedActor)
{
scoped_actor self;
self->send(spawnedActor, -5.01);
}

int main()
{
auto spawnedActor = spawn<C>();
testerA(spawnedActor);
testerB(spawnedActor);
await_all_actors_done();
}

Примечание: есть пример в руководстве пользователя CAF 0.14.0, показывающем, как это работает, но CAF 0.14.4 удалил метод spawn_typed, который сделал бы возможным создание / порождение inline typed_actor. Смотрите соответствующий GitHub вопрос для деталей.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]