我的./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路径即可完成该工作。

09-10 04:16
查看更多