gpt4 book ai didi

c++ - C++ api应该如何布局?

转载 作者:搜寻专家 更新时间:2023-10-31 02:15:33 27 4
gpt4 key购买 nike

假设我正在发布一个 C++ 库,其包含文件位于名为 api 的文件夹中。

// file: api/mylib/fwd/foo.h
inline int mylib_foo();

// file: api/mylib/impl/foo.h
inline int mylib_foo() { return 42; }

this question 的上下文中, 是否建议库构建者始终使用他们自己的 (api) 包含文件的“完整路径”?

// file: api/mylib/all.h
#include "mylib/fwd/foo.h" // as opposed to "fwd/foo.h"
#include "mylib/impl/foo.h" // as opposed to "impl/foo.h"

或者依赖预处理器“经常”首先搜索包含文件夹这一事实是否可以接受?

如果您不想将 /home/xtofl/libs/mylib/api 添加到编译器的包含路径,而是... #include "/home/xtofl/libs/mylib/api/mylib/all.h",甚至只是将 mylib 放在客户端代码旁边。

// file: api/mylib/all.h
#include "fwd/foo.h"
#include "impl/foo.h"

最佳答案

注意这与项目的布局方式无关(如问题标题所述),因为在所有情况下,您都假设 header 位于名为 fwd 的子目录中。问题是关于给定特定布局 使用哪种#include 指令。无论如何......

In the context of this question, is it advisable for library builders to always use the 'full path' to their own (api) include files?

// file: api/mylib/all.h
#include "mylib/fwd/foo.h" // as opposed to "fwd/foo.h"
#include "mylib/impl/foo.h" // as opposed to "impl/foo.h"

这假设包含代码将 api 目录添加到它的搜索路径中,并且您已经提到了两种假设可能失败的方式:

If you don't want to add /home/xtofl/libs/mylib/api to the compiler's include path but rather ... #include "/home/xtofl/libs/mylib/api/mylib/all.h", or even just put mylib next to the client code.

所以恕我直言,这样更好:

Or could it be acceptable to rely on the fact that the preprocessor 'often' searches the including folder first?

是的,我认为最好依靠它,并做到:

// file: api/mylib/all.h
#include "fwd/foo.h"
#include "impl/foo.h"

这处理了 api 在搜索路径中的情况,不在搜索路径中的情况,以及 mylib 不在名为 的目录中的情况>mylib 完全没有。

它依赖于实现定义的规则,即搜索包含在 #include "..." 中的 header 从包含文件的目录开始,但这对我所知道的所有编译器都是通用的,并且是比关于文件安装位置的其他假设更安全。

关于c++ - C++ api应该如何布局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38390351/

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