PIMPL的成语真的在实践中使用吗?

PIMPL的成语真的在实践中使用吗?

我正在读HerbSutter的“例外C+”一书,在那本书中我学到了PIMPL的成语。基本上,我们的想法是为private的对象class并动态分配给缩短编译时间(并以更好的方式隐藏私有实现)。

例如:

class X{private:
  C c;
  D d;  } ;

可改为:

class X{private:
  struct XImpl;
  XImpl* pImpl;       };

在CPP中,定义:

struct X::XImpl{
  C c;
  D d;};

这似乎很有趣,但我以前从未见过这种方法,无论是在我工作过的公司,还是在我见过源代码的开源项目中。所以,我想知道这种技术是否真的在实践中得到了应用?

我应该在任何地方使用它,还是要小心使用?这种技术推荐用于嵌入式系统(性能非常重要)吗?


互换的青春
浏览 258回答 3
3回答

一只斗牛犬

同意所有其他人关于这批货物的意见,但请允许我提出一个限制:模板不能很好地工作.原因是模板实例化需要在实例化发生时可用的完整声明。(这就是你没有看到模板方法被定义到CPP文件的主要原因)您仍然可以引用临时子类,但是由于必须将它们全部包括在内,所以在编译中“实现解耦”(避免在任何地方包含所有特定于平台的代码,缩短编译)的所有优点都会消失。对于传统的OOP(基于继承的)是一个很好的范例,但对于一般编程(基于专门化)则不是一个很好的
打开App,查看更多内容
随时随地看视频慕课网APP