我的./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;
};
}
分发库时,我想让用户仅包含一个头文件(例如./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
但是问题出在每次我对库的公共(public)部分进行更改或添加新类时,我也都必须更新mylib.h文件,这很不方便。什么是实现同一目标的更好方法?
最佳答案
我将从实现文件(位于“/ src”中)中的“/ src”中删除三个单独的 header ,并使用“/ include”中的一个公共(public) header 。在编译过程中,您只需要正确设置include路径即可完成该工作。