gpt4 book ai didi

C++ MSVS dll header #include 问题

转载 作者:行者123 更新时间:2023-11-28 08:26:09 25 4
gpt4 key购买 nike

大部分时间我都不使用 lib 链接和 dll 进行编码,最近当我这样做时,我意识到我执行 #include 的方式可能存在一些非常错误的地方。

以下是执行#include 的正确/理想方法吗?

假设我有 3 个项目 (1) dll_A (2) dll_B (3) exe_1。 dll_A依赖dll_B,exe_1依赖一个dll_A。

我执行#include 的方式如下:

dll_B.h ----> no dependency
dll_B.cpp -----> #include dll_B.h
dll_A.h -------> #include dll_B.h
dll_A.cpp -------> #include dll_A.h
exe_1.h --------> #include dll_A.h

从这里可以看出 exe_1.h 间接包含 dll_b.h,这对我来说有点不好,因为我希望 exe_1.h 独立于 dll_b.h...但是,我不确定是否这是可能的,因为 exe_1 还可以如何链接到 dll_b?

编辑:示例依赖

// dll_B.h
struct dataB{};

// dll_A.h
#include dll_B.h
dataB* A_function_ptr(); // (any difference for implementing PIMPL?)
dataB& A_function_ref();
dataB A_function_copy();

// exe_1.cpp
#include dll_A.h
// ... it seems naturally #include-sion of dll_B.h is necessary? Can it be avoided?

最佳答案

如果 dll_B 只是 dll-A 的一个实现细节,那么不要从 [dll_A.h] 中包含 [dll_B.h],只需从 [dll_A.cpp] 中包含它即可。

避免 header 依赖可能需要稍微重新设计。

例如你可能想考虑一下 PIMPL idiom对于 [dll_A]。

如果不了解更多细节,就无法陈述更多细节......:-)

干杯,

PS:链接与头文件无关,除了某些 Windows 编译器(特别是 MSVC),头文件可以包含一个 #pragma 导致自动链接到正确的库。

关于C++ MSVS dll header #include 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4002179/

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