首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我应该在任何地方使用PIMPL吗?

我应该在任何地方使用PIMPL吗?
EN

Stack Overflow用户
提问于 2014-12-15 10:47:52
回答 2查看 1.3K关注 0票数 5

我目前的项目包括编写一个PIMPL API,我已经决定使用PIMPL成语。

我应该在我的项目中的任何地方使用PIMPL成语吗?例如,我需要创建一个继承自std::exception的自定义类,是应该考虑使用PIMPL成语来设计这个类,还是可以将其作为一个公共实现来编写?

假设我使用的是我创建的每个类都应该围绕它设计的PIMPL成语,这是错误的。在使用而不是的情况下,是否有例外情况?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-15 11:23:19

如果您正在编写API /库,那么问题是API用户的主要优势是什么,甚至是他们将使用什么样的IDE和工具来使用您的API。使用PIMPL的要点是:

  • 您确实希望向用户隐藏实现(您有大量的私有方法和字段以及非常简单的公共接口)。
  • 您希望将它们从平台相关代码中抽象出来。
  • 你想减少他们的构建时间。

您不应该使用PIMPL时,当虚拟调用或任何类型的间接花费您的用户在他们的程序的操作时间太多:

  • 重复的小函数调用序列(您不能从API级别删除它)。
  • 创建和删除大量的小对象(您不能从API级别删除它)。
票数 4
EN

Stack Overflow用户

发布于 2014-12-15 10:52:38

PIMPL有成本。

因此,真正需要它的地方只是一个好主意,例如包含使用使用C++关键字作为名称的C头,或者定义无数个宏。

有些人(包括Herb)主张或者至少不反对仅仅为了缩短构建时间而使用PIMPL,但其他措施,比如将硬件扔到问题上,代价可能会更低。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27482339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档