我的 ./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;
};
}
当我分发我的库时,我想让用户#include 仅一个头文件(例如 ./mylib/include/mylib/mylib.h)并使用请求和响应。所以我创建了一个像这样的大头文件:
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 文件,这很不方便。实现相同目标的更好方法是什么?