Qt关键字(signal、slot等)与第三方库中的函数、变量冲突的解决办法

同事在Qt环境下开发,使用第三方库(好像是什么tbb的库)时,里面有这样的一个结构体

struct event {
    event(const std::string &) { }
    void emit() { }
    static void emit(const std::string &) { }
};

然后在编译的时候,报错说什么语法错误。大概看了一下主要是Qt将这个结构体的emit函数识别成Qt的信号发射关键字emit了。
一开始找到的解决办法是

CONFIG += no_keywords

但是这样其他类中的emit、signal、slot又不能用了,要改成Q_EMIT之类的,严重影响使用体验。
好在,找到了一个机翻的文章。它里面提到了一个解决办法undef,测试了一下,的确可以,因此可以在包含第三方库的头文件时这样子:

...
#undef emit
#include 
#define emit
...

你可能感兴趣的:(Qt相关,qt,开发语言)