c++ - 与第三方公共(public)图书馆/代码接口(interface)

标签 c++ class namespaces extern

我想用 an available public code 评估一个算法在我的项目中。我已经集成了 files该算法需要添加到我的项目中:kodtree.hkodtree.cpppinpolyhedron.hpinpolyhedron.cpp。然而,编译器提示符号不明确。我将不明确的变量名更改为其他名称,编译器编译它没有问题。这种方式看起来不像是解决问题的优雅方式。

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

  • 将它们放入 namespace 是否会给我带来麻烦,因为它们可以包含 extern
  • 有人可以告诉我在为此类库创建 namespace 时应该注意的事项吗?
  • 使用 namespace 是执行此操作的正确方法吗?
  • 或者为该库创建一个接口(interface)类并放入所有内容会更好,即 kodtree.hkodtree.cpppinpolyhedron.hpinpolyhedron.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/

相关文章:

javascript - 如何从命名空间外部更新内部配置?

php - 如何使用 PHP 根据嵌套命名空间数组中的值对数组进行排序

c++ - 无重复代码的多态函数调用

c++ set ordered iterating - 迭代集的结果是否按标准排序?

python - 四种方法的类文字游戏

c++ - 基类的前向声明

PHP 自动加载命名空间

c++ - 断开qt定时器进行单元测试

c++ - 具有不同参数的同名宏

java - 使用简单的打印方法打印数组对象