c++类名冲突

C++ class name conflict

本文关键字:冲突 c++      更新时间:2023-10-16

我现在正在做一个需要整合两个子项目的项目。

项目A是用c++编写的,项目B是用C编写的。一个问题是,在项目B中,有一个由其作者创建的结构体vector,而在项目A中,使用了STL中的std::vector。因为项目B可能稍后会更新,所以我不想更改B的向量类的名称。

有办法处理这种情况吗?

这就是为什么c++中有命名空间!建议将自己的vector类包装在自己的名称空间中。

它们已经是不同的名字了,分别是vectorstd::vector。你不需要改变任何东西

如果你像这样合并两个项目,你当然会用c++编程…

你可以把C向量包装在一个命名空间中…无论何时需要使用C语言向量,都可以将其类型调用为C_NAMESPACE::vector。(不要同时导入两个命名空间!)

试一下,看看它是否有效。div =)

在我看来,有两个非常简单的解决方案。

  1. 避免使用using namespace std;,将标准库的向量称为std::vector,将C向量称为vector::vector
  2. (如果你坚持用std的内容污染项目的命名空间)引用标准库的向量为vectorstd::vector, C向量为::vector

如果您还不知道,在任何命名空间之外声明的任何标识符x都可以被引用为::x,它总是与在命名空间内声明的任何标识符x不同。

在这种情况下,我的首选是避免在任何地方写vector,以避免混淆。我会总是将标准库的向量称为std::vector,将C向量称为::vector。如果你这样做了,即使你是using namespace std;也没关系。