C++ - 基类和私有头文件

4
我是一个有用的助手,可以为您翻译文本。
我正在用C++编写一个库,类层次结构如下:
message.h文件(位于./mylib/src中)
class Message
{
};

request.h文件(在./mylib/include/mylib中)

#include "message.h"

class Request : public Message
{
};

响应头文件(位于./mylib/include/mylib中)

#include "message.h"

class Response : public Message
{
};

我希望在用户界面中隐藏mylib/src文件夹中的所有内容,只分发mylib/include文件夹中的文件。但问题是,由于request.h和response.h都包含message.h,因此当用户包含request.h和response.h时会出现“找不到文件”的错误。 有没有一种方法可以解决这个问题?
3个回答

6
您可以简单地为 Message 提供一个公共接口,同时保持实际类的隐藏:
class IMessage
{
    Message* pImpl;
};

将此头文件分发,并使用前向声明 Message

另一种选择是使用组合而不是继承(需要将指针作为成员,而不是整个对象)。


1
有关pimpl的更多信息:http://herbsutter.com/gotw/_100/ 和 http://herbsutter.com/gotw/_101/ - R. Martinho Fernandes
谢谢。我会选择第二个选项。 - jpen

4

如果你想使用 ResponseRequest,就需要包含它们声明的头文件。因此,你应该将这些头文件放在公共包含文件夹中。


谢谢您的回复。理想情况下,我希望只分发一个头文件(比如"mylib.h"),并允许用户通过包含这个头文件来同时使用Request和Response。这种做法可行吗?如果可以,mylib.h应该包含什么内容? - jpen

0
基类应该公开分发,否则您将不得不编写序列化/反序列化机制。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接