Qt名称冲突,但no_keywords不是一个选项

Ele*_*ito 5 c++ macros qt compiler-errors signals-slots

我陷入两难境地.在我正在使用Qt编写的程序中,我使用一个(非Qt)库,在其标题中使用Qt关键字作为名称(库是精确的pf_ring,名称为"slots")所以我得到了编译错误.但是如果我使用no_keywords选项关闭Qt关键字,编译器会抱怨另一个库的标题(这是一个基于Qt的标题),它使用Qt关键字,如"signals"和"slots".

那么我该如何解决这个问题呢?我只想到两个选项,这两个选项都不令人满意:

  1. 我可以更改第二个库的头文件,以便它们符合no_keywords模式(将"slots"更改为"Q_SLOTS"等等).

  2. 我可以将pf_ring相关代码移动到它自己的子项目中,我可以在其中关闭Qt关键字或根本不使用Qt.

你能否提出另一种希望更优雅,更少麻烦的解决方案?

Zla*_*mir 7

这取决于库,如果它是一个小的库,你可以制作一个"包装"标题(只有或没有),它不暴露插槽或在wrapper_namespace中公开它(注意你可以使用#undef slots).

  • #undef-ing插槽是我最后所做的;像这样:#undef slot #include <pfring.h> #define slot Q_SLOTS (2认同)