我使用两个lib jsoncpp和imap(lib c-client)。如何在两个头文件中避免冲突C++
json cpp具有写入功能。 但在imap库中它们有一些宏,它们覆盖了jsoncpp中的一些宏。 我无法同时使用这两个库。 我该如何避免这种冲突?
我使用两个lib jsoncpp和imap(lib c-client)。如何在两个头文件中避免冲突C++
json cpp具有写入功能。 但在imap库中它们有一些宏,它们覆盖了jsoncpp中的一些宏。 我无法同时使用这两个库。 我该如何避免这种冲突?
假如你不使用写宏从IMAP:
#include "imap.h"
#undef write
#include "jsoncpp.h"
只要你有权访问头文件,并且你正在使用lib或dll,只要你不使用这个宏,你应该可以使用#undef
它。
继续进行下去的最佳方式是在会表现“更好”的标题(这里imap
)封装违规头。
请注意,#define
实际上是一个懒惰的内嵌函数。您需要识别safe_write
的所有声明,并在相同的命名空间中提供适当的重载。
// my_imap.h
#include "imap.h"
#undef write
inline void write(FILE* file, char* content, size_t size) {
safe_write(file, content, size);
}
// ...
然后包括my_imap.h
,而不是imap.h
。
我不确定这会工作,但也许'#include'他们在命名空间? – Maxpm 2011-03-16 16:15:53
@Maxpm先生您可以举一个例子吗? – 2011-03-16 16:20:55
@Maxpm:宏不关心名称空间。这是他们是邪恶的原因之一:) – 2011-03-16 16:22:20