我当前的项目涉及编写C ++ API,我决定使用PIMPL习语。
我是否应该在项目中的任何地方使用PIMPL惯用语,例如我需要创建一个继承自std::exception
的自定义类,我是否应该考虑使用PIMPL习惯用法来设计这个类,或者我可以像公开一样编写执行?
假设我只是因为我使用PIMPL习语,我创建的每个类都应该围绕它设计,这是错误的。是否存在PIMPL 不的例外情况?
答案 0 :(得分:3)
PIMPL有成本。
因此,在您真正需要它的地方,这是一个好主意,例如包含使用C ++关键字作为名称的C头,或者例如定义了数以万计的宏。
有些人(包括Herb)主张或者至少不反对纯粹使用PIMPL来减少构建时间,但其他措施(如在问题上投入硬件)可能成本更低。
答案 1 :(得分:3)
如果您正在编写API /库,问题是API用户的主要优势是什么,甚至是他们使用API时使用的IDE和工具。 使用PIMPL的关键点是:
当虚拟调用或任何间接方式在用户的程序运行时间过长时,您不应该使用PIMPL: