gpt4 book ai didi

c++ - 在静态函数c++中获取类的类型

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:13:02 25 4
gpt4 key购买 nike

我有这段代码:

struct Type{
const char* name;
// other stuff
};

template <class T>
class Base{
public:
// some other functions
static const Type *Get_Type(){
/* Get the STATIC type of the class and make a new Type object */
virtual const Type *My_Type();
};

编辑:

我想实现两个成员函数 Get_Type() 和 My_Type()。每个继承自 Base 的派生类都像这样继承 Base

我无权访问任何派生类,也无法更改 Get_Type() 和 My_Type() 的声明,但是其他一切都是允许的。

Get_Type() - 应该实现返回调用它的类的类型。

My_Type - 应该实现返回调用对象的动态类类型。

例如:

class Derived1: public Base<Derived1> {
public:
Derived1() {}
};

class Derived2 : public Derived1 , public Base<Derived2> {
public:
Derived2() {}
};

int main() {
Derived1* b= new Derived2();
Derived2::Get_Type(); // should return a struct Type with name=Derived2
b->My_Type(); // should return a struct Type with name=Derived2
return 0;
}

我的问题是:

1) 在静态函数 Get_Type 的主体中,我如何知道调用类的类型?

2) 如何在 My_Type() 的主体内获取对象 (this) 的动态类型?

最佳答案

C++ 中没有虚拟静态。您可以获得的最接近的是:

  • 让它成为一个虚拟成员函数
  • 有一个继承自 Base 的中间 BaseGetTypeImpl 模板类
  • 让 BaseGetTypeImpl 使用 T 的类型实现 Get_Type()
  • 声明derived时,继承自BaseGetTypeImpl

这称为 CRTP。

替代方案 - 因为您只需要类型 - 可以是在 基础(即全局)之外声明的特征模板类。

关于c++ - 在静态函数c++中获取类的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37905708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com