gpt4 book ai didi

C++ - 导出 C++ 库公共(public)部分的正确方法

转载 作者:行者123 更新时间:2023-11-30 04:21:29 28 4
gpt4 key购买 nike

我的 ./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)并使用 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

但问题是每次我对库的公共(public)部分进行更改或添加新类时,我都必须同时更新 mylib.h 文件,这很不方便。实现相同目标的更好方法是什么?

最佳答案

我会从“/src”中删除三个单独的 header ,并在我的实现文件(位于“/src”中)中也使用“/include”中的一个公共(public) header 。在编译期间,您只需正确设置包含路径即可使其正常工作。

关于C++ - 导出 C++ 库公共(public)部分的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14506310/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com