【发布时间】:2014-02-06 18:25:41
【问题描述】:
在设计 C++ 库时,我了解到在公共接口中包含 std::vector 之类的标准库容器是一种不好的做法(参见例如 Implications of using std::vector in a dll exported function)。
如果我想公开一个接受或返回对象列表的函数怎么办?我可以使用一个简单的数组,但是我必须添加一个count 参数,这使得界面更麻烦,更不安全。例如,如果我想使用map,它也无济于事。我猜像 Qt 之类的库定义了自己的可以安全导出的容器,但我宁愿不添加 Qt 作为依赖项,也不想滚动自己的容器。
在库界面中处理容器的最佳做法是什么?是否有可以用作“胶水”的小型容器实现(最好只有一个或两个我可以放入的文件,具有许可的许可证)?或者有没有办法让std::vector 等跨 .DLL/.so 边界并使用不同的编译器安全?
【问题讨论】:
标签: c++ containers api-design