从父类访问派生类名

天才

在我从事的项目中,我需要能够访问程序中每个实例的完整类名。我的方法是声明一个基类,所有类都将从该基类派生而来,该基类将具有一种方法,该方法将正确分解给定实例的类的名称。如下所示:

class Base { 
  public: 
  std::string *getClassName() { 
    char *str = (char*) malloc(1024);
    size_t size = 1024;
    int status;
    char *res = abi::__cxa_demangle( typeid(*this).name(), str, &size, &status );
    return new std::string(res);
  };

 class A : public Base { /*...*/ };
 class B : public A { /*...*/ };
 // ... and so on

问题是,当我getClassName从类B的实例访问时,它不返回Base::A::B而是返回Base,这是从getClassName声明的位置可见的类

我发现的唯一解决方案是getClassName虚拟化并强制每个类都实现它。但这意味着重写总是相同的代码,这是我不想要的。您知道对此有什么优雅的解决方案吗?

亚历克斯

您可以只在基类中定义虚拟析构函数:

#include <iostream>
#include <malloc.h>
#include <cxxabi.h>

using namespace std;

class Base {
public:
    virtual ~Base() {}
    std::string getClassName() {
        char *str = (char*) malloc(1024);
        size_t size = 1024;
        int status;
        char *res = abi::__cxa_demangle( typeid(*this).name(), str, &size, &status );
        return std::string(res);
    }
};

class A : public Base { /*...*/ };
class B : public A { /*...*/ };

int main()
{
    A a;
    B b;


    cout << a.getClassName() << endl;
    cout << b.getClassName() << endl;
}

输出:

./test
A
B

顺便说一句,在这种情况下,最好让__cxa_demangle分配内存(并且不要忘记使用:: free(),因为此示例代码存在内存泄漏)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从基类的派生类访问属性

来自分类Dev

从派生类访问基类对象

来自分类Dev

从基类指针访问派生类

来自分类Dev

从派生类访问受保护的方法

来自分类Dev

从派生类对象访问重写的方法

来自分类Dev

多态 - 如何访问派生类的方法?

来自分类Dev

从基类的指针访问派生类的成员

来自分类Dev

从基类指针访问派生类成员

来自分类Dev

从派生类访问基类中的受保护成员

来自分类Dev

如何从C ++中的基类访问派生类的属性?

来自分类Dev

仅从派生类访问基类方法

来自分类Dev

从派生类访问虚拟基类函数

来自分类Dev

从派生类访问基类中的类型别名

来自分类Dev

从类型为基类的向量访问派生类方法

来自分类Dev

从派生类访问基类中的受保护成员

来自分类Dev

从基类指针访问派生类成员

来自分类Dev

派生类模板

来自分类Dev

处理派生类

来自分类Dev

C ++派生类

来自分类Dev

隐藏派生类

来自分类Dev

派生类C ++

来自分类Dev

如何从基类获取派生类名?

来自分类Dev

如何通过类型为base的指针访问派生类中的成员,但指向派生类

来自分类Dev

C ++:使用抽象类中的指针访问派生类的方法;派生类豌豆也要抽象

来自分类Dev

为什么`this`在调用派生类对象时无法从基类方法访问派生类成员

来自分类Dev

无法访问派生类中的变量

来自分类Dev

如何访问子类派生类中实现的接口方法?

来自分类Dev

访问派生类对象的字段,C ++与Java

来自分类Dev

如何通过派生类访问Android内部样式属性?