1

以下のような工場があるとします。ObjectA.h と ObjectB.h を含めないことが可能かどうかを知りたいです。

ディレクトリ構造
ファクトリー

|-----オブジェクト A

|-----オブジェクト B

サブディレクトリにヘッダー ファイルを含めたくないので、そうする方法はありますか? また、新しい objectC があれば、ファクトリ クラスを変更する必要はありません。タイプが「TypeC」の場合、ObjectC が自動的に作成されます。

#include "ObjectA.h"
#include "ObjectB.h"

object* create(const string& type)
{
    if (type == "typeA")
    {
       return new ObjectA();
    }
    else
    {
       return new ObjectB();
    }
};
4

1 に答える 1

1

はい、実装を実装ファイルに分離し、そこにファイルのみを含め、ヘッダーに関数プロトタイプのみを提供します。

実際に呼び出すには、呼び出しサイトに定義を含める必要new ObjectA();ありnew ObjectB();ます。

//factory.h
object* create(const string& type);

//factory.cpp
#include "factory.h"
#include "ObjectA.h"
#include "ObjectB.h"

object* create(const string& type)
{
    if (type == "typeA")
    {
       return new ObjectA();
    }
    else
    {
       return new ObjectB();
    }
};
于 2012-07-13T05:45:30.030 に答える