假设有如下工厂。我想知道是否可以不包含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();
}
};
答案 0 :(得分: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();
}
};