我的./mylib/src目錄中有以下文件。我希望此位置的任何內容都可以隱藏起來。C++ - 導出C++庫的公共部分的正確方法
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)並使用Request和Response。所以,我創建了一個大的頭文件是這樣的:
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文件,這是不方便的。什麼是更好的方式來實現相同的事情?
提供包含所有其他標頭的頭文件。那麼,我的意思是包含像'#include':P –
編譯器?平臺?請提及 – Ajay
兩個平臺:Windows(VC2010)和Linux(Eclipse CDT + Cygwin GCC) – jpen