如何获得c++中继承特定类的所有声明类的列表?

How do I get a list of all declared classes inheriting from a particular class in C++

本文关键字:声明 列表 c++ 何获得 继承      更新时间:2023-10-16

我知道这在c++中是不可能的,但也许一个工具链可以生成具有函数的代码,当调用它时,它会给我一个所有这些类的列表。例如,在多个文件中,我有这样的内容:

class MyClass : public ParticularClass {
    ....
}
class MyClass2 : public ParticularClass {
    ....
}

然后,在运行时,我只需要一个指向类的单个实例的指针。假设我生成的代码看起来像这样:

void __populate_classes() {
    superList.append(new MyClass());
    superList.append(new MyClass2());
}

同样,superList的类型为List<ParticularClass*>。另外,我将使用Qt和ParticularClassQObject派生,所以我可以获取类的名称。我基本上需要对类进行内省,所以我的内部代码并不需要为新定义的类型操心太多。

那么,是否有一种方法来生成一些工具链的代码?如果可以单独使用qmake,那就像蛋糕上的糖霜一样:)

感谢您的宝贵时间。

氧在这方面做得很好——离线。各种ide在这方面做得很好——脱机。编译器不会这样做。编译器不需要或使用这些知识。

在工作中,我使用一个叫做Understand c++的工具。它是一个帮助您分析代码的工具。它很容易做到这一点。但我最喜欢的部分是它附带了C和Perl API,它允许您利用抽象语法树来"理解"封装并编写自己的静态分析工具。我已经使用这个API编写了大量的工具。

不管怎样,它是由SciTools编写的。http://scitools.com,我也不为他们工作。我只是真心喜欢他们的产品。事实上,我写了一个c# API来包装他们的C API,并在几年前发布在CodePlex上。当然比用C或Perl编写静态分析工具要好。

我觉得你这么做不是个好主意。那些在你之后维护代码的人将很难理解你的代码。

也许你可以试试如何在c++中实现它。我想到的一个可能的解决方案是实现工厂设计模式。然后可以遍历工厂中的所有数据类型,并将它们添加到superList

无论如何,使用ack(简单的grep替换)可以完成这项工作,如果您总是在一行中声明继承:

ack ": *public ParticularClass" *.h