Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 什么';将派生类用作模板参数是什么?_C++_Templates_Terminology_Crtp_Static Polymorphism - Fatal编程技术网

C++ 什么';将派生类用作模板参数是什么?

C++ 什么';将派生类用作模板参数是什么?,c++,templates,terminology,crtp,static-polymorphism,C++,Templates,Terminology,Crtp,Static Polymorphism,这种模式的目的是什么?它叫什么?当我第一次看到它时,它看起来很奇怪,尽管我现在已经看过很多次了 template<typename Derived> struct Base { //... }; struct Example : Base<Example> { //... }; 模板 结构基{ //... }; 结构示例:Base{ //... }; ,或者我们所说的CRTP。它被称为模式,允许静态多态性 当您希望向特定类添加功能,但希望该实用程序在一般情况下

这种模式的目的是什么?它叫什么?当我第一次看到它时,它看起来很奇怪,尽管我现在已经看过很多次了

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

struct Example : Base<Example> {
  //...
};
模板
结构基{
//...
};
结构示例:Base{
//...
};
,或者我们所说的CRTP。

它被称为模式,允许静态多态性


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

我想您正在参考。也可参考

4秒前的第一个答案;你们这些家伙在偷懒@Thomson Tan:请仔细注意@GMan关于静态多态性的观点。这是很重要的一点。它提供模拟来自基类的虚拟函数调用,而不需要虚拟函数的开销(如果这很重要)