gpt4 book ai didi

c++ - 是否可以将名称附加到 C++ 中的运行时类?

转载 作者:行者123 更新时间:2023-11-28 00:56:45 24 4
gpt4 key购买 nike

我有一个类的层次结构,基类有一个打印类名的函数:

#include <iostream>
using namespace std;

class base
{
public:
virtual void print_name() { cout << typeid(*this).name() << endl; };
};

class derived1 : public base { };

class derived2 : public base { };

int main ()
{
base Base;
Base.print_name();

derived1 Derived1;
Derived1.print_name();

derived2 Derived2;
Derived2.print_name();
}

上面的输出是

class base
class derived1
class derived2

这实际上取决于平台。

是否有或多或少的标准方法来为每个类“附加”一些唯一的名称,以便可以在 printname() 中使用它,使所有平台的输出都相同(并且独立于对实际类(class)名称进行了任何更改)?

最佳答案

当然:

class base {
public:
virtual char const *name() const { return "base"; }
};

class derived1 : public base {
public:
virtual char const *name() const { return "derived1"; }
};

但是,如果您不重写类中的 name,它的名称将是其父类(super class)的名称。这可能是错误或功能,具体取决于您的用例。如果它是一个错误,那么您可以添加一些运行时检查以确保该方法被覆盖:

virtual char const *name() const {
if (typeid(*this) != typeid(base))
throw std::logic_error("name() not overridden");
return "base";
}

但是您必须在必须覆盖的 name 的每个实现中重复此检查。

关于c++ - 是否可以将名称附加到 C++ 中的运行时类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10783487/

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