C ++类名冲突

时间:2014-06-14 06:02:08

标签: c++ c class stl

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

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

有没有办法处理这种情况?

4 个答案:

答案 0 :(得分:1)

这就是你在C ++中拥有namespaces的原因!建议将自己的vector类包装在自己的命名空间中。

答案 1 :(得分:1)

他们已经分别有不同的名字vectorstd::vector。你不必改变任何东西。

答案 2 :(得分:0)

如果你要合并这样的2个项目,你当然会用C ++编程......

您可以将C矢量包装在命名空间中......每当您需要使用C矢量时,您将其类型称为C_NAMESPACE :: vector。 (不要导入两个命名空间!)

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

答案 3 :(得分:0)

我认为,有两个非常简单的解决方案。

  1. 避免使用using namespace std;并将标准库的向量称为std::vector,将C向量称为vector::vector
  2. (如果您坚持使用std的内容污染项目的命名空间)请将标准库的向量称为vectorstd::vector,将C向量称为{{1 }}。
  3. 如果您还不知道,在任何名称空间之外声明的任何标识符::vector都可以称为x始终与任何标识符{{不同1}}在命名空间内声明。

    在这种情况下,

    我的偏好是为了避免在任何地方写::x,以避免混淆。我总是将标准库的向量称为x,将C向量称为vector。如果你这样做,即使你是std::vector也没关系。