这种模式的目的是什么?这叫什么?当我第一次看到它时,看起来很奇怪,尽管我现在已经看过很多次了。派生类作为模板参数的用途是什么?
template<typename Derived>
struct Base {
//...
};
struct Example : Base<Example> {
//...
};
这种模式的目的是什么?这叫什么?当我第一次看到它时,看起来很奇怪,尽管我现在已经看过很多次了。派生类作为模板参数的用途是什么?
template<typename Derived>
struct Base {
//...
};
struct Example : Base<Example> {
//...
};
它被称为Curiously Recurring Template模式,并允许静态多态性。
当您想要将功能添加到特定的类,但希望该实用程序在一般情况下可用时,它非常有用。通过使该实用程序依赖于并使用模板参数,您可以实现两者。
@Thomson Tan:请注意@Gan关于静态多态性的观点。这是一个重要的观点。它提供了模拟来自基类的虚拟函数调用,而没有虚拟函数的开销(如果这很重要) – Chubsdad 2010-10-27 07:44:06