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 回答