我有一个 CRTP 类的继承链。CRTP 类相互派生,直到“最终”派生类将自身作为 CRTP 参数传递并最终确定继承链。
template <class W>
struct Base
{
.....
};
template <class W>
struct Derived_inheritable: public Base<W>
{
....
}
template <class W>
struct Derived2_inheritable: public Derived_inheritable<W>
{
....
}
...
我想要做的是能够在 CRTP 继承链的每个级别都有这样的“最终”最终用户类,不涉及模板:
typedef Derived1_inheritable<Derived1> Derived1;
你可以猜到,这个 typedef 不起作用,因为它引用了自己定义的类型。问题是如何实现这一目标?我能想到的方法是:
struct Derived1: public Derived1_inheritable<Derived1>
{
//not convenient, need to redefine at least a forwarding constructor
}
正如代码中的注释所说,这不是一个非常优雅的解决方案 - 我需要重新定义构造函数以转发到基本构造函数。有谁知道更优雅的方式?