C++ アクター フレームワークでは、アクターを厳密に型指定できます。フレームワークは、型指定されたアクターによる継承もサポートしていますか?
質問する
168 次
1 に答える
1
はい - 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 では、typed_actor のインライン作成/スポーンを可能にする spawn_typed メソッドが削除されています。詳細については、対応する GitHub の問題を参照してください。
于 2015-12-10T17:16:33.437 に答える