我正在编写一个独立于平台的套接字库。基本文件结构是这样的:将平台特定的库包含在一个头文件和单独的源文件中
source directory
|_________________________
| | |
v v v
header.hpp win32 linux
| |
v v
source.cpp source.cpp
头文件包含的任何#include
S中的跨操作系统普遍。源文件#include
平台特定的库。
我已经构建了很多像这样的项目,但我遇到了套接字问题。由于我正在为我的函数参数指定默认值,因此header.h
需要头文件中使用的#defines
的平台特定库,如SOCK_STREAM
,AF_INET
和SOMAXCONN
。
现在,我不想在头文件中使用#ifdef _WIN32
语句,因为我希望所有平台特定的代码都位于单独文件夹中的源文件中。
我基本上是坚持在一块石头和一个艰难的地方?是否避免#ifdef #includes
并指定默认参数值与标头相关的#defines
互斥?
我喜欢第一个的想法,但我为其他用户提供了Doxygen文档,并且将默认参数的值设置为无效值可能无助于可读性。 第二个是个好主意。我现在就给一个镜头。不过,我想减少代码重复。 – Littlegator 2012-07-16 14:36:32
@Littlegator:我试着将代码重复的数量降到最低。但是,您的文档应该仅使用默认参数记录单个API。我确信你想到了命名不同的常量(比如mySOCK_STREAM)的想法,并且使用这些参数已经超出了你的想法,但为了保持一致性,你必须在套接字库中复制几乎所有常量。无论如何,如果这是你的意图,Anon的想法不是一个坏方法。 – jxh 2012-07-16 14:57:55