我知道在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
就可以了,那就像是在为这个怪诞的蛋糕锦上添花:)
非常感谢你的时间。
答案 0 :(得分:2)
Doxygen做得很好 - 离线。各种IDE在这方面做得很好 - 离线。编译器不会这样做。编译器不需要或不使用这些知识。
答案 1 :(得分:0)
在工作中,我使用了一个名为Understanding 4 C ++的工具。它是一个帮助您分析代码的工具。它很容易做到这一点。 但我最喜欢的部分是它带有一个C和Perl API,它允许您利用“理解”封装和编写您自己的静态分析工具的抽象语法树。我用这个API写了很多工具。
无论如何,它是由SciTools编写的。 http://scitools.com我并不为他们工作。我只是全心全意地喜欢他们的产品。事实上,我写了一个C#API,它包装了他们的C API,并在几年前发布在CodePlex上。当然可以使用C或Perl来编写静态分析工具。
答案 2 :(得分:0)
我不认为你想要做的是一个好主意。那些在你之后维护代码的人将很难理解它。
也许你会试着看看如何在计划C ++中做到这一点。我想到一个可能的解决方案来实现工厂设计模式。您可以在工厂中迭代所有数据类型,然后添加到 superList 。
任何方式,如果你总是在一行中声明继承,使用ack(简单的grep替换)可以完成这项工作:
ack ": *public ParticularClass" *.h