当 C++ 项目构建到 DLL 时,防止 #include 特定标头?

问题描述 投票:0回答:1

我计划将一个 C++ 项目构建为 DLL,以供其他 C++ 项目使用。在构建 DLL 时,您可能会假设我希望项目中的所有编译头对象都链接到 DLL 构建中。但是,我不希望 DLL 的用户可以访问所有这些标头。

例如,假设某个 DLL 项目具有以下标头:

FORFRUITSONLY.h
orange.h
apple.h

orange.h
apple.h
都是
#include
FORFRUITSONLY.h
否则它们将无法工作。然而,我希望这个 DLL 的用户只能
#include
orange.h
和/或
apple.h
,如果他们尝试
#include
FORFRUITSONLY.h
,编译器就会失败。我怎样才能实现这个目标?

c++ dll linker
1个回答
0
投票

我解决这个问题的常用方法是将 DLL 标头分成两部分,一个是项目内部标头,另一个是要从其他项目包含的公共标头。

这里棘手的部分是公共接口的任何部分都需要包含在内。

例如,如果导出带有 std::string 成员的类型,则需要 #include 作为公共标头的一部分。

如果您还没有这样做的话,一个建议是研究一下 pimpl 惯用法,并使公共界面尽可能精简。与模板库不同,DLL 的客户端不需要(或至少非常有限)了解库内部如何运行。

© www.soinside.com 2019 - 2024. All rights reserved.