4

我正在用 C++ 编写一个库,并且有一个像这样的类层次结构:

message.h 文件(在 ./mylib/src 中)

class Message
{
};

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

#include "message.h"

class Request : public Message
{
};

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

#include "message.h"

class Response : public Message
{
};

我希望 mylib/src 文件夹中的所有内容对用户隐藏,并且只想分发 mylib/include 中的文件。但问题在于requst.h 和response.h #include message.h 因此用户在#include request.h 和response.h 时会收到“无此类文件”错误。有没有办法解决这个问题?

4

3 回答 3

6

您可以简单地提供一个公共接口Message并隐藏实际的类:

class IMessage
{
    Message* pImpl;
};

分发此标头并为Message.

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

于 2013-01-24T13:09:09.507 回答
4

如果您希望能够使用Response并且Request需要在声明它们的位置包含头文件。这就是为什么您应该将这些标头放在公共包含文件夹中的原因。

于 2013-01-24T13:07:49.327 回答
0

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

于 2013-01-24T13:25:53.997 回答