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の両方であるため、#includerequest.hとresponse.hの場合、ユーザーは「Nosuchfile」エラーを受け取ります。この問題を回避する方法はありますか?

4

3 に答える 3

6

パブリックインターフェイスを提供しMessageて、実際のクラスを非表示にしておくことができます。

class IMessage
{
    Message* pImpl;
};

このヘッダーを配布し、の前方宣言を使用しMessageます。

もう1つのオプションは、継承の代わりに構成を使用することです(オブジェクト全体ではなく、メンバーとしてポインターが必要になります)。

于 2013-01-24T13:09:09.507 に答える
4

使用できるようにしたい場合で、宣言されているヘッダーファイルをインクルードする必要がありますResponseRequestそのため、これらのヘッダーをパブリックインクルードフォルダーに配置する必要があります。

于 2013-01-24T13:07:49.327 に答える
0

基本クラスは公に配布する必要があります。そうしないと、シリアル化/逆シリアル化のメカニズムを作成する必要があります。

于 2013-01-24T13:25:53.997 に答える