2010-12-03 31 views
4

我想在某些C++代码中使用第三方SDK。尽管SDK和头文件在技术上与C++兼容,但它实际上只是一小撮讨厌的C。如何处理daft头文件

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

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

,你能想象什么好看的错误消息我在尝试使用具有这样的事情在他们Boost库时:

template< typename F > struct template_arity; 

一些战术#undefs可以解决的事情,但它仍然感觉像一个滴答作响的炸弹。我可以选择重写第三方头文件的大部分内容,也可以尝试隔离我真正需要的部分。

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

+0

+1 ...哇 – Thanatos 2010-12-03 16:30:38

+2

你基本上拧 – 2010-12-03 16:36:22

回答

2

是否有原作者为您重写?

说真的,这看起来很糟糕的设计案例。我会重写宏,可能是enum s。

8

那么只包含一个.cpp文件中的关键文件,然后通过一个单独的头文件公开所需的功能呢?

2

您可以将第三方库封装在自己的界面之后。这使您可以只将第三方标题包含在源文件中,而不会与其他任何东西混淆。其实这是一个很好的建议:切勿将第三方标题包含在自己的标题中。始终且只能在源文件(.cpp)中包含第三方标题。

祝你好运!

0

你确实需要在你的代码中使用这些值,还是只在内部使用它们的头部?

你可以编写一个新的头文件来包含那个undef的包含其他内容之前的有问题的定义。 。

可能并不实用,但宏会导致这样的痛苦所以有可能notbe很多工作要做:(