2

C++ アクター フレームワークでは、アクターを厳密に型指定できます。フレームワークは、型指定されたアクターによる継承もサポートしていますか?

4

1 に答える 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 に答える