C++ - 基类和私有头

jpe*_*pen 4 c++ header-files static-libraries

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

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

class Message
{
};
Run Code Online (Sandbox Code Playgroud)

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

#include "message.h"

class Request : public Message
{
};
Run Code Online (Sandbox Code Playgroud)

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

#include "message.h"

class Response : public Message
{
};
Run Code Online (Sandbox Code Playgroud)

我希望我的mylib/src文件夹中的所有内容都对用户隐藏,并且只想在mylib/include中分发文件.但问题是requst.h和response.h #include message.h,因此当#including request.h和response.h时,用户将收到"No such file"错误.有办法解决这个问题吗?

Luc*_*ore 6

您只需提供一个公共接口Message并隐藏实际类:

class IMessage
{
    Message* pImpl;
};
Run Code Online (Sandbox Code Playgroud)

分发此标头并使用前向声明Message.

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