Leg*_*ion 15 c# c++ pimpl-idiom
我来自C#背景,最近开始学习C++.我遇到过的一件事是pimpl成语.我为一些大公司做过C#开发,但从未遇到过它.
也许这是错误的,但我的理解是,由于使用头文件而没有部分类选项,因此在C++中这是必要的.
但在C#中,我们会一直使用类库构建应用程序.如果库代码中的内容发生了变化,我们会将其重新编译为dll并在应用程序项目中引用新的dll.
我真的不明白为什么用C++不能做同样的事情.Pimpl对我来说就像是一个丑陋的黑客.
Eri*_*ert 26
是否在c#中使用了pimpl习语?
这取决于你这个成语的意思.
有问题的习惯用法主要是将类型的实现细节分成一个类,将公共表面区域分成一个包装类,它只是保存到实现类的指针.
这有两个好处.
首先,在C++中,它可以改善编译时间,因为公共表面区域的消费者只需要解析包含公共表面区域的头文件; 他们不需要解析包含实现细节的头文件.
其次,它导致界面与实现的非常清晰的分离; 实施可以彻底改变,而不会对消费者产生任何影响,因为消费者永远不会看到实施细节.
第一个好处是无论在C#中.C#编译器很快.(当然,很大程度上是因为语言设计得很快才能编译.)
第二个好处是在C#中有相当大的用处.在C#中,实现此模式的惯用方法是创建一个执行"真实"工作的私有嵌套类,以及一个仅与公共表面区域相关的公共类.
的技术我特别喜欢在C#是使公共类的基类的私有嵌套类的,给基类的私有构造,以防止第三方扩展,并使用工厂模式来伸手,私人嵌套类的实例.
我真的不明白为什么用C++不能做同样的事情.
然后我鼓励你尝试编写一个这样做的C++编译器.你要么成功创建一个更快的C++编译器,要么你会发现为什么在C++中不能做同样的事情.无论哪种方式都有益!
| 归档时间: |
|
| 查看次数: |
2280 次 |
| 最近记录: |