【发布时间】:2016-11-17 17:56:49
【问题描述】:
我正在prj_cpp.h 中开发一个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_cpp.h 已损坏。这是根本问题,解决它是正确的解决方法。
-
同意,正确的解决方法是什么?防止在命名空间下使用 lib_c.h?
-
编写新的、未损坏的 lib_cpp.h 和 lib_c.h 版本,并使用它们代替原始版本。原件未经修改,因此仍符合分配规范。
-
好的,lib_cpp.h 的完整版本应该是什么样子的?永远不要在命名空间子句下使用 C 头文件?
-
头文件不是库!
标签: c++ namespaces