我在我的项目中定义了list_t,它得到了类似于list_pop()的列表模块API。但是现在我不得不使用MySQL库来与DB通信,但是MySQL库仍然有它的列表实现,并且还定义了一个list_pop()API。在我的其他模块中,我必须将它们链接起来,然后发生冲突。
我的解决方案之一是,为不同的list API调用分别包含头文件,这很好,但是当一些函数需要同时调用MySQL::list_pop()local::list_pop()时,如何通知编译器正确的链接点?是否有一些GCC技巧可以在不改变local::list_pop()的情况下完成这些任务?

最佳答案

对于大多数实际用途,您将不得不重命名一个或另一组函数。你自己的名字可能比MySQL的要容易些。
最简单的方法是简单地添加一个具有更高的唯一性(足够)概率的前缀,比如您的缩写,或者您的项目的代码名,或者其他什么。或者您可以重命名所有内容以避免冲突,因为您知道MySQL将来可能会添加一个新函数。
这就是为什么名称空间是为C++发明的,以及为什么C项目通常在函数集上有系统前缀。

10-06 12:30
查看更多