处理代码重新定义int类型(uint16_t,int16_t等)和Boost不喜欢它

时间:2018-04-02 15:38:02

标签: c++ c++11 boost boost-asio

所以我在这里有一点立场,我不确定如何继续进行,或者它是否可以解决......

我们使用其他团队提供的第三方SDK,此SDK必须用于我们的应用才能正常运行。

在此SDK中,有这样的行

#define uint16_t UINT16
#define uint8_t UINT8

问题出在Boost中,更具体地说,ASIO / Details / cstdint.hpp文件中有

行。
using std::uint16_t
using std::uint8_t

我的应用程序现在不会编译因为它真的在做

using std::UINT16
using std::UINT8

它抱怨这些类型显然不存在于std命名空间中。

这些UINT16和UINT8定义在应用程序中的任何地方都非常大,因此替换它们并不是很可行,我甚至不确定如果我这样做,SDK是否会起作用。

在包含boost头文件之前,我可以尝试#undef所有这些定义吗?然后重新定义它们?看起来很傻,我怀疑它甚至会起作用。

有什么建议吗?

1 个答案:

答案 0 :(得分:9)

  

问题出在Boost中,更具体地说,ASIO / Details / cstdint.hpp文件中有

行。

那是颠倒的。问题显然在标题中重新定义了完全常见的类型名称。

最可行的解决方案是在包含任何提升标头之前包含SDK标头。

拼凑而成的解决方法是取消定义宏。 (如果你问我,那条路就是疯狂的):

#ifdef uint16_t
     #undef uint16_t
#endif