6

我有一个难题。在我使用 Qt 编写的程序中,我使用了一个(非 Qt)库,该库在其标题中使用 Qt 关键字作为名称(确切地说,库是 pf_ring,名称为“slots”),所以我得到编译错误。但是如果我使用 no_keywords 选项关闭 Qt 关键字,编译器会抱怨另一个库的头文件(这个基于 Qt 的)使用 Qt 关键字,如“信号”和“插槽”。

那么我该如何解决这个问题呢?我只能想到两个都不是很令人满意的选择:

  1. 我可以更改第二个库的头文件,使它们符合 no_keywords 模式(将“插槽”更改为“Q_SLOTS”等等)。

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

您能否提出另一种希望更优雅、更省事的解决方案?

4

1 回答 1

8

这取决于库,如果它是一个小库,您可以制作一个“包装器”标头(仅或不),它不公开插槽或在 wrapper_namespace 中公开它(请注意,您可以使用#undef slots)。

于 2013-05-19T18:46:33.340 回答