1

これは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おかしなケーキの上のアイシングのようになるでしょう:)

お時間をいただき、誠にありがとうございます。

4

3 に答える 3

2

Doxygen は、オフラインでこれを行うのに優れた仕事をします。さまざまな IDE がオフラインでうまく機能します。コンパイラはこれを行いません。このような知識は、コンパイラによって必要とされず、使用されません。

于 2011-09-10T10:24:09.790 に答える
0

ここでは、Understand 4C++というツールを使用しています。これは、コードの分析に役立つツールです。これは非常に簡単に実行できます。しかし、私のお気に入りの部分は、CおよびPerl APIが付属していることです。これにより、カプセル化を「理解」する抽象構文ツリーを利用して、独自の静的分析ツールを作成できます。このAPIを使用してたくさんのツールを作成しました。

とにかく、それはSciToolsによって書かれています。http://scitools.comと私は彼らのために働いていません。私は彼らの製品が心から好きです。実際、私はC APIをラップするC#APIを作成し、数年前にCodePlexに投稿しました。静的分析ツールを作成するためにCまたはPerlを使用することは間違いありません。

于 2011-09-10T11:03:52.880 に答える
0

あなたがやろうとしていることは良い考えではないと思います。あなたの後にコードを維持する人はそれを理解するのに苦労するでしょう。

多分それの代わりにあなたはあなたが計画C++でそれをどのように行うことができるかを見ようとするでしょう。ファクトリデザインパターンを実装するために頭に浮かぶ1つの可能な解決策。ファクトリですべてのデータ型を反復処理してから、superListに追加することができます。

とにかく、常に1行で継承を宣言する場合は、ack (単純なgrep置換)を使用して作業を行うことができます。

ack ": *public ParticularClass" *.h 
于 2011-09-10T12:20:34.893 に答える