【问题标题】:How do I get a list of all declared classes inheriting from a particular class in C++如何获取从 C++ 中的特定类继承的所有声明类的列表
【发布时间】:2011-11-14 07:42:18
【问题描述】:

我知道这在 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,那简直就是锦上添花:)

非常感谢您的宝贵时间。

【问题讨论】:

    标签: c++ qt toolchain gnu-toolchain


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

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

        ack ": *public ParticularClass" *.h 
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-14
          • 2019-01-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多