
我的问题:
为什么这是一件坏事?特别针对autoLists的想法,但一般来说CRTP的答案就足够了.
我的目的是在实体组件系统中使用它,这样我就可以轻松地分离每种类型的组件.
解决方法 我已经在C,Java和C#中广泛使用了CRTP及其一些变体,并且从“同事反馈”中我可以告诉你一件事:许多人根本不理解它,并且自动变得敌对“这样过于复杂废话”.直到有人使用它几次,人们才真正发现很难看到它的好处 – 就像他们看到的任何其他“复杂”“新”机制一样.
确实有时它被用在错误的地方,并且必须特别小心地使用它 – 但这是任何重要工具的生命.就像多继承一样 – 很多人讨厌它.但你怎么能讨厌锤子呢?没有什么可恨的,只要正确使用它并在真正有益的地方使用,而不仅仅是因为你可以.
首先,重新考虑一下你是否真的需要使用它.模板基类是否真的需要知道确切的派生类型?虚拟成员还不够吗?没有它可以逃脱吗?您的案例有哪些好处?它是否会使“更高级代码”更短,更易读,更明显或更具可扩展性或更不容易出错?
在许多情况下,您会发现基础不需要知道确切的派生类型,您可以用更多的虚拟方法替换它.但这可能会使整个代码对于更多用户来说更加复杂.另一方面,对于CRTP,最终的机制更多是“自动化”,有时实际上并不是有益的.
对于实体类,通常CRTP的某些变体实际上有一个原因:如果你的基础暴露了一些返回“类似”对象的实用方法,你经常希望这些方法返回精炼的“MyObject *”而不是“ObjectBase *”,那就是没有它很难实现.但是,真正的问题是:这些方法真的应该在实体的基类中而不是在“工厂”,“经理”或“存储上下文”中吗?
总结以上是内存溢出为你收集整理的奇怪的重复模板模式(CRTP),AutoLists和C.全部内容,希望文章能够帮你解决奇怪的重复模板模式(CRTP),AutoLists和C.所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)