CRTP是否使用了很多?以及为什么是/不是?[关闭]


11

我正在考虑奇怪地重复使用模板模式

我发现它非常有用,并且对于许多任务来说都可以很好地调整。但是我必须承认,我没有看到很多CRTP代码。

很难把握吗?虚拟功能总体上是否更容易?90%出现虚拟关键字的情况下,是否应该使用它?

Answers:


8

一个简单的事实是,即使不是大多数,很多C ++用户也很难理解它vectormalloc和更好的东西free,因此不仅可以欣赏而且可以实现高级模板元编程的人数并不多。这意味着即使它对90%的情况都有效,您看到它的机会也要少得多,这仅仅是因为人们不知道它或如何使用它。

但是,虚拟功能确实具有优势,即,虚拟功能比CRTP更易于使用。C ++模板因对几乎所有事物都bit之以鼻而臭名昭著,而包含模型则很糟糕。

但是,它们(虚拟功能)明显较慢且功能较弱。例如,我现在正在使用CRTP编写代码,您可以在其中继承用于表达式模板的运算符重载。虚拟功能不可能使这项工作奏效。


1
CRTP为避免使用“虚拟”而使用的语言功能在“虚拟”任何事物上都有些bit讽,是否有点讽刺?
Kaiserludi

6

WTL使用CRTP。铬浏览器是使用WTL的著名软件示例,因此我想说它是“野外使用”的。

大约90%?绝对是夸大其词。您是否曾经使用过多态对象的容器?这是多态的一种非常常见的用法,您不能使用CRTP来实现,因为Base<DerivedA>与并不相同Base<DerivedB>


-5

以下是未广泛使用的原因:

  1. 这是一个hack
  2. 作为黑客,不能保证您在使用时不会遇到麻烦。普通的OO东西已被大量项目使用,并且发现其工作正常/问题众所周知,CRTP仅在少数项目中被发现,并且没有可用数据
  3. 没有充分的理由使用它-大多数原因都只是无效的
  4. 它会使某些事情变得更复杂

11
肯定不是黑客。行为定义非常明确,并且有很多用途。
DeadMG

5
是的,整个STL是一个大技巧。
Abyx 2011年

您能编辑答案并解释为什么会被黑客入侵吗?
尼克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.