在理想世界,你将使用静态多形态模板,在用户投入无法确定这种模式的情况下,给你尽可能好的业绩。
The reality is that templates force most of your code into headers and this has the consequence of exploding your compile times.
我做了一些利用静态多变性来实施一般的PC图书馆的大型通用节目(https://github.com/byte Principal/mace(pc_static_poly Branch)。 在这种情况下,议定书(Jerson-RPC、运输(TCP/UDP/Stream/etc)和类型)在编纂时都知道,因此没有理由做令人怀疑的派遣......或是否有这样的运输?
当我通过一个单一程序前处理器操作该守则时。 c 计算结果为25万条线,需要30+秒才能编制单一物体档案。 我在 Java和C#实施了相同的功能,并汇编了约第二份。
几乎每 st或加强头盔,包括增加数千条或10条,必须处理每个主题文件,其中多数是多余的。
是否汇编时间? 在大多数情况下,它们对最后产品的影响比最大程度优化的消除影响更大。 原因是,每ug都需要试卷、汇编、测试周期,如果每个周期需要30+秒,则发展速度慢慢慢到无计划(谷歌语的动机)。
在用java和C# I花了几天后,我决定需要重新考虑我对C++的做法。 没有理由认为,C++方案应比履行同样职能的C基础要慢得多。
现在我选择了超时的多变,除非貌相显示瓶颈是难以置信的。 我现在使用模板,在涉及空白*或抽象基类的基本物体顶端提供刚刚出现的多形态和类型安全接口。 这样,用户不必从我的接口中获取,而且仍然感觉到通用的方案规划,但是他们能够受益于快速汇编的时间。 如果履约成为一个问题,则通用守则可改为静态多变。
成果是惊人的,汇编时间从30+秒减少到大约2次。 后处理器源代码目前是1 000条线,而不是25万条线。
在讨论的另一方面,我正在开发一个司机图书馆,用于一套类似的但略有不同嵌入装置。 在此情况下,嵌入装置没有额外的编码空间,也没有用于可变的发送。 我们唯一的选择是,通过职能点,单独提交物体档案或运行时间多变。 利用通用节目和静态多形态,我们得以创建可维持的软件,其速度比我们在C生产的任何产品要快。