C++ CRTP 类层次结构 [英] C++ CRTP class hierarchy
本文介绍了C++ CRTP 类层次结构的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
来自维基百科:
// The Curiously Recurring Template Pattern (CRTP)
template <typename T>
struct base
{
// ...
};
struct derived : base<derived>
{
// ...
};
现在如果我想要derived_from_derived
,我可以写:
Now if I want derived_from_derived
, I can write:
// The Curiously Recurring Template Pattern (CRTP)
template <typename T>
struct base
{
// ...
};
template <typename T>
struct derived : base<T>
{
// ...
};
struct derived_from_derived : derived <derived_from_derived>
{
// ...
};
现在假设我只想要一个 derived
对象.这不起作用:
Now suppose I just want a derived
object. This doesn't work:
derived<derived> obj;
derived
是否必须是抽象的,或者有没有办法实例化它?
Does derived
have to be abstract, or is there a way to instantiate it?
推荐答案
我自己的答案是这样的:
My own answer is this:
struct base
{
template <typename T>
struct type
{
// ...
};
};
struct derived
{
template <typename T=derived>
struct type : base::type<T>
{
// ...
};
}
struct derived_from_derived
{
template <typename T=derived_from_derived >
struct type : derived::type<T>
{
// ...
};
};
现在我可以有一个 derived::type<>对象
.此外,参数化继承也有效(例如装饰器模式):
Now I can have a derived::type<> obj
. Also, parametized inheritance works (e.g. decorator pattern):
template <typename whatever>
struct derived_from_whatever
{
template <typename T=derived_from_whatever>
struct type : whatever::type<T>
{
// ...
};
};
derived_from_whatever<derived_from_derived>::type<> obj_whatever;
这篇关于C++ CRTP 类层次结构的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文