我正在开发中prj_cpp.h
一个C++
项目作为C++冲突的命名空间
// prj_cpp.h
#include "lib_cpp.h"
extern "C" {
#include "lib_c.h"
}
凡lib_cpp.h
和lib_c.h
分别头外部的C++和C库的文件,这开始。
外部C++库lib_cpp.h
还以下面的方式使用lib_c
。
// lib_cpp.h
namespace SOME_WEIRD_NAMESPACE {
extern "C" {
#include "lib_c.h"
}
}
因为lib_c.h
防止重包含,事实证明,在lib_c.h
所有对象驻留在SOME_WEIRD_NAMESPACE
这无关我的项目prj_cpp
。
在另一方面,如果我的头文件看起来像
// prj_cpp.h
extern "C" {
#include "lib_c.h"
}
#include "lib_cpp.h"
我打破了外部C++
项目,因为没有什么SOME_WEIRD_NAMESPACE
下,因为我有lib_c.h
第一。
我不允许修改既不lib_cpp.h
也不lib_c.h
有什么我可以在我的prj_cpp.h
如何解决这样的问题?
我不很喜欢在我的项目中使用SOME_WEIRD_NAMESPACE
因为该命名空间无关,用它做。而且,lib_c.h
头文件的数量可能很大。如果您使用lib_c.h超过lib_cpp.h使用下面的包装
// lib_c_wrapper.h
namespace SOME_WEIRD_NAMESPACE {
extern "C" {
#include "lib_c.h"
}
}
:
lib_cpp.h已损坏。这是根本问题,修复它是正确的解决方法。 –
同意,什么是适当的修复?防止在名称空间下使用lib_c.h? – TruLa
编写新的非破坏版本的lib_cpp.h和lib_c.h,并使用它们代替原始文件。原件未经修改,因此分配规范仍然符合。 – user4581301