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