c++类名冲突
C++ class name conflict
我现在正在做一个需要整合两个子项目的项目。
项目A是用c++编写的,项目B是用C编写的。一个问题是,在项目B中,有一个由其作者创建的结构体vector
,而在项目A中,使用了STL
中的std::vector
。因为项目B可能稍后会更新,所以我不想更改B的向量类的名称。
有办法处理这种情况吗?
这就是为什么c++中有命名空间!建议将自己的vector
类包装在自己的名称空间中。
它们已经是不同的名字了,分别是vector
和std::vector
。你不需要改变任何东西
如果你像这样合并两个项目,你当然会用c++编程…
你可以把C向量包装在一个命名空间中…无论何时需要使用C语言向量,都可以将其类型调用为C_NAMESPACE::vector。(不要同时导入两个命名空间!)
试一下,看看它是否有效。div =)
在我看来,有两个非常简单的解决方案。
- 避免使用
using namespace std;
,将标准库的向量称为std::vector
,将C向量称为vector
或::vector
。 - (如果你坚持用
std
的内容污染项目的命名空间)引用标准库的向量为vector
或std::vector
, C向量为::vector
。
如果您还不知道,在任何命名空间之外声明的任何标识符x
都可以被引用为::x
,它总是与在命名空间内声明的任何标识符x
不同。
在这种情况下,我的首选是避免在任何地方写vector
,以避免混淆。我会总是将标准库的向量称为std::vector
,将C向量称为::vector
。如果你这样做了,即使你是using namespace std;
也没关系。
相关文章:
- 写入位置0x0000000C时发生访问冲突
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- 链表中写入访问冲突的未知原因
- C++中的openCV Mat访问冲突
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- C++尝试深度复制唯一指针时出现内存访问冲突
- 错误:使用通用引用的声明冲突
- 如何解决GTest和LibTorch联动冲突
- 两个运营商的一些奇怪的冲突<<
- 如何在多个线程中创建 QSql数据库连接时防止名称冲突
- C++ 中动态二维数组的访问冲突
- 从嵌套循环中的 std::list 中删除将返回访问冲突
- C++17 十六进制浮点文字单精度后缀冲突?
- 结构字段名称与 GDB 中的 STL 数组冲突
- 写入访问冲突异常
- C++ |匿名命名空间与命名空间 std 冲突
- 这个SSDO演示的GLSL版本要求是自我冲突的吗