./mylib/src ディレクトリに次のファイルがあります。この場所にあるものはすべてユーザーから隠したいです。
message.h ファイル (./mylib/src 内)
// Include guard
namespace MyLib
{
class Message
{
public:
Message();
virtual ~Message() = 0;
virtual bool ToString(std::string& rstrOutput);
bool IsEmpty() const;
protected:
void DoStuff();
private:
Message(const Message&); // Disable
Message& operator=(const Message&); // Disable
private:
int m_nData;
};
}
request.h ファイル (./mylib/src 内)
// Include guard
#include "message.h"
namespace MyLib
{
class Request : public Message
{
public:
Request();
~Request();
bool ToString(std::string& rstrOutput);
private:
bool Build();
private:
bool m_b;
};
}
response.h ファイル (./mylib/src 内)
// Include guard
#include "message.h"
namespace MyLib
{
class Response : public Message
{
public:
Response();
~Response();
std::string GetSomething() const;
};
}
ライブラリを配布するとき、ユーザーが 1 つのヘッダー ファイル (./mylib/include/mylib/mylib.h など) のみを #include して、要求と応答を使用できるようにしたいと考えています。そこで、次のような 1 つの大きなヘッダー ファイルを作成しました。
mylib.h ファイル (./mylib/include/mylib 内)
// Include guard
#include <string>
namespace MyLib
{
class Message
{
public:
Message();
virtual ~Message() = 0;
virtual bool ToString(std::string& rstrOutput);
bool IsEmpty() const;
};
class Request : public Message
{
public:
Request();
~Request();
bool ToString(std::string& rstrOutput);
};
class Response : public Message
{
public:
Response();
~Response();
std::string GetSomething() const;
};
}
#endif
しかし、問題は、ライブラリの公開部分を変更したり、新しいクラスを追加したりするたびに、mylib.h ファイルも更新する必要があり、不便です。同じことを達成するためのより良い方法は何ですか?