0

私は一連のイベントクラスを開発しています。これらのクラスには、システムから取得した情報が含まれています。それらは異なる性質のものであり、異なるメッセージを含む場合があります。たとえば、あるイベントには膨大な数のリストが含まれ、別のイベントには文字列の形式でクエリ情報が含まれます。正しいタイプのイベントを作成してユーザーに返すビルダー関数を作成したいと思います。

これがどのように見えるかのデモンストレーションは次のとおりです。

main.cpp:

#include <iostream>

#include "A.h"
#include "dA.h"

using namespace std;

int main()
{

   cout << "Hello world!" << endl;

   A a = build(5);

   return 0;
}

Event.h:

#ifndef A_H_INCLUDED
#define A_H_INCLUDED

#include <iostream>

class A
{
public:
    friend A build(int x);
protected:
    A(int x);
private:
};
#endif // A_H_INCLUDED

イベント.cpp:

#include "A.h"

A::A(int x)
{
    {
        std::cout << "A\n";
        std::cout << x << std::endl;
    }
}

A build(int x)
{
    if(x == 5)
        return dA(x);
    return make(x);
}

スペシャルイベント.h

#ifndef DA_H_INCLUDED
#define DA_H_INCLUDED

#include <iostream>

#include "A.h"

class dA : public A
{
public:
protected:
    dA(int x);
};

#endif // DA_H_INCLUDED

特別なイベント.cpp:

#include "dA.h"

dA::dA(int x) : A(x)
{
    std::cout << "dA\n";
}

ご覧のとおり、すべてのコンストラクターは保護されています。その意図は、ユーザーから構築を隠すことです-(s)ユーザーは何もないところからイベントを作成するべきではなく、システムだけが作成できます-そして、ビルド関数が正しい型を返すことを保証しますイベント。

コンパイルすると、次のようになります。

error: 'build' was not declared in this scope
warning: unused variable 'a' [-Wunused-variable]

すべてを同じファイルに入れればコンパイルはできますが、巨大なファイルになってしまい管理が難しくなります。上記のコードは単なる例であることに注意してください。私が使用する実際のクラスは巨大で、宣言と実装の両方を同じファイルに入れると、すべてが混乱します。

4

1 に答える 1