我想用 an available public code 评估一个算法在我的项目中。我已经集成了 files该算法需要添加到我的项目中:kodtree.h
、kodtree.cpp
、pinpolyhedron.h
和 pinpolyhedron.cpp
。然而,编译器提示符号不明确。我将不明确的变量名更改为其他名称,编译器编译它没有问题。这种方式看起来不像是解决问题的优雅方式。
我正在考虑使用 namespace
但发现,例如,文件 kodtree.h
有几个 extern
。
- 将它们放入
namespace
是否会给我带来麻烦,因为它们可以包含extern
? - 有人可以告诉我在为此类库创建 namespace 时应该注意的事项吗?
- 使用
namespace
是执行此操作的正确方法吗? - 或者为该库创建一个接口(interface)类并放入所有内容会更好,即
kodtree.h
、kodtree.cpp
、pinpolyhedron.h
和pinpolyhedron.cpp
,在该类中并将它们设为私有(private)? - 推荐的做法是什么?
如果有任何提示,我将不胜感激。
最佳答案
Is using namespace the right way of doing this?
是的,但不是您尝试的方式。图书馆应该适本地为自己命名空间,但有时他们不能或不会出于各种原因。最好保留它们,除非您打算围绕库代码编写一个完整的包装器。
我们总是可以应用一些规则和命名空间我们自己的代码。简单地说,我们可以在我们自己的每一个源文件中做这样的事情1:
#include <some_library.h>
#include <my_other_project_header.h>
namespace ProjectName { namespace ModuleName {
// Your code here
}}
这样一来,您的代码就可以很好地与您包含的任何内容隔离开来。除非有任何 extern "C"
东西,否则应该没有冲突。无论库头拖入什么,它都不会与您在 namespace 内编写的代码发生冲突。同时,您的代码最多可以引用一个级别的项目实体(Module1
中的代码可以引用 Module2::Foo
,或 Module1::Bar
简单的 Bar
)。除此之外,您始终可以通过完全限定事物或使用 using 声明来引用 Project
命名空间之外的事物。
1:如果你的编译器支持C++17,它会更可口:
namespace ProjectName::ModuleName {
}
关于c++ - 与第三方公共(public)图书馆/代码接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51925305/