如何处理daft头文件

时间:2010-12-03 16:17:45

标签: c++ include

我正在尝试在某些C ++代码中使用第三方SDK。虽然SDK和标题在技术上与C ++兼容,但它实际上只是一堆讨厌的C。

特别是主头文件有数百个#defines,其中这些是最差的。

#define     C  0       //Celsius
#define     F  1       //Fahrenheit
#define     R  2       // Rankine
#define     K  3       // Kelvin

现在,您可以想象在尝试使用包含类似内容的boost库时,我得到的错误信息是什么:

template< typename F > struct template_arity;

一些战术#undefs可以解决问题,但它仍然像一颗定时炸弹。我也可以重写第三方标题的大部分内容,或者只是尝试隔离我真正需要的部分。

这个问题有更好的解决方案吗?

4 个答案:

答案 0 :(得分:8)

如果仅在单个.cpp文件中包含违规文件,然后通过单独的标题公开所需的功能呢?

答案 1 :(得分:2)

请原作者为您重写吗?

说真的,这看起来像是一个设计非常糟糕的情况。我重写了宏,可能是enum s。

答案 2 :(得分:2)

您可以将第三方库包装在您自己的界面之后。这允许您仅在源文件中包含第三方标题,而不存在其他任何内容混乱的风险。实际上这是一个很好的建议:永远不要在你自己的标题中包含第三方标题。始终且仅包含源文件(.cpp)中的第三方标题。

祝你好运!

答案 3 :(得分:0)

您是否真的需要在代码中使用这些值,或者它们仅在内部的标题中使用?

您可以编写一个新标题,以便在包含其他任何内容之前不包含违规定义的标题之后包含。

可能不实用但宏会引起这种痛苦,所以可能没什么可做的:(