与第三方接口 public libraries/codes

Interfacing with third-party public libraries/codes

我想评估一个算法 an available public code in my project. I have integrated the files 该算法需要进入我的项目:kodtree.hkodtree.cpppinpolyhedron.hpinpolyhedron.cpp。然而,编译器抱怨符号不明确。我将不明确的变量名更改为其他名称,编译器编译它没有问题。这种方式看起来不像是解决问题的优雅方式。

我正在考虑使用 namespace 但发现,例如,文件 kodtree.h 有几个 extern

如有任何提示,我将不胜感激。

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" 之外,应该没有冲突。无论库头拖入什么,它都不会与您在名称空间内编写的代码发生冲突。同时,您的代码最多可以引用具有一级资格的项目实体(Module1 中的代码可以引用 Module2::Foo,或者 Module1::Bar 中的代码可以简单地引用 Bar) .除此之外,您始终可以通过完全限定事物或使用 using 声明来引用 Project 命名空间之外的事物。


1:如果你的编译器支持C++17,那就更可口了:

namespace ProjectName::ModuleName {

}