是否有可能从基类中获得派生类的类型,而不使用c++中的模板?

  • 本文关键字:c++ 类型 有可能 基类 派生 是否 c++
  • 更新时间 :
  • 英文 :


假设我有一些不相关的类,我希望它们都有一个指向自己的指针。当然,我可以使用模板来实现这一点:

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方法。所以我想我还是用现在的代码吧。

最新更新