1

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

class MyClass : public ParticularClass {
    ....
}

class MyClass2 : public ParticularClass {
    ....
}

然后,在运行时,我只想要一个指向该类的单个实例的指针。假设我生成的代码如下所示:

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

此外, superList 的类型为List<ParticularClass*>. 另外,我将使用 QtParticularClass并将其QObject派生,因此无论如何我都可以获取类的名称。我需要基本上反省这个类,所以我的内部代码并没有真正关心新定义的类型。

那么,有没有办法用一些工具链生成这段代码?如果可以qmake单独使用,那就像在该死的蛋糕上锦上添花:)

非常感谢您的时间。

4

3 回答 3

2

Doxygen 在这方面做得很好——离线。各种 IDE 在这方面做得很好——离线。编译器不这样做。编译器不需要或使用此类知识。

于 2011-09-10T10:24:09.790 回答
0

我不认为你试图做的是一个好主意。那些在你之后维护代码的人将很难理解它。

也许代替它,您会尝试看看如何在 C++ 计划中做到这一点。我想到的一种可能的解决方案是实现工厂设计模式。比您可以遍历工厂中的所有数据类型,然后添加到superList

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

ack ": *public ParticularClass" *.h 
于 2011-09-10T12:20:34.893 回答
0

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

无论如何,它是由 SciTools 编写的。http://scitools.com我不为他们工作。我只是全心全意地喜欢他们的产品。事实上,我编写了一个 C# API 来包装他们的 C API,并在几年前将其发布在CodePlex上。当然比使用 C 或 Perl 编写静态分析工具要好。

于 2011-09-10T11:03:52.880 回答