假设我有一些不相关的类,我希望它们都有一个指向自己的指针。当然,我可以使用模板来实现这一点:
template <typename T>
struct Base {
// omitted the code to setup the variable
static T *ptr;
}
class Derived1 : Base<Derived1> {}
class Derived2 : Base<Derived2> {}
// To use:
Derived1 d();
d.ptr->func();
我的问题是,我们能在没有模板的情况下实现这一点吗,特别是在c++ 20和23中引入了这么多的特性(比如概念)?
理想情况下我喜欢这样:
struct Base {
using Derived = std::directly_derived_type(Base);
static Derived *ptr;
}
class Derived1 : Base {}
class Derived2 : Base {}
在这种情况下,如果Base
被实例化而不是基类,编译器应该拒绝编译代码,因为Derived
无法解析。
根据讨论,没有无模板的CRTP方法。所以我想我还是用现在的代码吧。