【发布时间】:2011-08-03 14:51:17
【问题描述】:
假设我有两个项目。一个是应用程序,另一个是共享库,其中包含通用的、可重用的代码,这些代码不仅仅可供该应用程序使用。
我的应用程序使用 STL,而我的共享库也使用 STL。这里的第一个问题是我的共享库使用的是 STL。如果我在我的应用程序中构建了新版本的 STL,但因为没有必要而没有重新构建共享库,那么我们将立即遇到兼容性问题。
我解决这个问题的第一个想法是在共享库类的接口中根本不使用 STL。假设我们的库中有一个函数,它接受一个字符串并用它做一些事情。我会让函数原型看起来像:
void DoStuffWithStrings( char const* str );
代替:
void DoStuffWithStrings( std::string const& str );
对于字符串,这在不同版本的 STL 之间可能没问题,但缺点是我们要从 std::string 到 char*,再回到 std::string,这似乎会导致性能问题。
是否推荐将原始类型装箱/拆箱到对应的 STL 类型?当我们尝试对std::list 执行此操作时,情况会变得更糟,因为确实没有“原始类型”,我知道我们可以轻松地传递它,而无需执行某种 O(n) 或类似操作。
什么设计最适合这种情况?各有什么优缺点?
【问题讨论】:
标签: c++ design-patterns stl shared-libraries