如何获得c++中继承特定类的所有声明类的列表?
How do I get a list of all declared classes inheriting from a particular class in C++
我知道这在c++中是不可能的,但也许一个工具链可以生成具有函数的代码,当调用它时,它会给我一个所有这些类的列表。例如,在多个文件中,我有这样的内容:
class MyClass : public ParticularClass {
....
}
class MyClass2 : public ParticularClass {
....
}
然后,在运行时,我只需要一个指向类的单个实例的指针。假设我生成的代码看起来像这样:
void __populate_classes() {
superList.append(new MyClass());
superList.append(new MyClass2());
}
同样,superList的类型为List<ParticularClass*>
。另外,我将使用Qt和ParticularClass
将QObject
派生,所以我可以获取类的名称。我基本上需要对类进行内省,所以我的内部代码并不需要为新定义的类型操心太多。
那么,是否有一种方法来生成一些工具链的代码?如果可以单独使用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
- C++声明双链表,使用两个 for 循环双向遍历列表并打印
- 构造函数/函数声明参数列表中的统一初始化
- "extern"声明以及带有和不带参数列表的类模板实例的后续定义
- 无法在声明时使用初始值设定项列表初始化常量字符*/字符串数组的向量
- 如何在C++中声明抽象类的向量列表?
- c++17通过生成预先声明的类型列表的笛卡尔乘积来生成std::变体
- 用初始化列表和超类构造函数声明子类构造函数的正确方式
- 如何在成员初始化列表中声明共享指针
- C++具有继承列表的模板声明
- 声明带有变量的列表
- 声明变量以保存字符串列表时的内存分配
- STL C 中不同类型的列表声明的错误
- C++:使用声明中的逗号分隔列表
- 在声明节点创建链接列表时,为什么静态内存分配不起作用
- 声明并使用静态列表来打印对象(在c++中)
- 函数参数列表中的类声明
- 声明列表列表时"required from here"错误
- 在类的头文件中声明列表
- 如何使用Clang获取C/ c++程序的所有全局声明列表
- 将成员方法声明列表获取到文本编辑器中