派生类作为模板参数有什么用途?

8

这个模式的目的是什么?它叫什么名字?我第一次看到它时觉得非常奇怪,但现在我已经看过很多次了。

template<typename Derived>
struct Base {
  //...
};

struct Example : Base<Example> {
  //...
};
3个回答

10

它被称为奇异递归模板模式,可以实现静态多态性。

当您想要向特定类添加功能,但希望该实用程序在通用情况下可用时,它非常有用。通过使实用程序依赖于并使用模板参数,您可以同时实现这两个目的。


6

1
首次回答只用了4秒钟,你们有些懒惰! - Roger Pate

6
我认为你指的是Curiously Recurring Template Pattern (CRTP),可以参考维基百科这里

@Thomson Tan:请注意 @GMan 关于静态多态性的观点。这是一个重要的观点。它可以模拟从基类调用虚函数,而不需要虚函数的开销(如果这是重要的)。 - Chubsdad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接