我们什么时候为dll或某个库创建一个头文件。它有特定于平台的代码。通常是根据平台分发的头文件?(Linux,Mac,Windows)
boost库或wxwidgets库的头文件怎么样?
答案 0 :(得分:3)
创建库时,对于所有平台,当头文件相同时,通常情况下最好。但是,对于大多数实际库而言,存在一些需要差异的系统依赖性。库的用户最好与任何差异隔离开来,将平台细节封装到实现中可能是合理的,例如,使用私有实现习惯用法。
如果系统依赖关系蔓延到接口,则标头中的声明可能会有变化。例如,访问网络基础设施的方式取决于系统,并且所涉及的类型和函数调用在平台之间是不同的。如果数据结构直接嵌入到用户可见的类中(例如,提高性能)或者从标题调用函数,例如,因为它们是从函数模板调用的,则可能存在差异。
我对处理标题差异的偏好是使用条件编译并保持相同的标题和接口。在大多数情况下,我尝试进一步将条件编译的使用集中到每个不同实体的一个位置,以尽可能避免条件编译:当需要另一个配置时,我想尽可能少地更新。
答案 1 :(得分:2)
理想情况下,头文件中接口的实现应根据平台(Linux,Mac,Windows)而有所不同。在标准实现中,头文件应该相同。 使用编译标志分隔不同平台的代码。 这是理想的情况,但是一些不良的库甚至可能有不同的标题。