2011-09-10 6 views
1

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を使用しているとParticularClassQObjectになるので、私はクラスの名前をとにかくフェッチすることができます。私は基本的にクラスをイントロスペクトする必要があるので、私の内部コードは新しく定義された型についてはあまり気にしません。

だから、いくつかのツールチェーンでこのコードを生成する方法はありますか?可能であればqmakeで可能であれば、それは恐ろしいケーキのアイシングのようなものでしょう:)

ありがとうございます。

答えて

2

Doxygenはオフラインでこれを実行するのに素晴らしい仕事をします - オフラインです。さまざまなIDEがこれでいい仕事をします - オフラインです。コンパイラはこれをしません。そのような知識は、コンパイラによって必要とされたり、使用されたりしません。

0

ここで私はUnderstand 4 C++というツールを使用しています。これは、コードを分析するのに役立つツールです。それは非常に簡単にこれを行います。 しかし、私の好きな部分は、CおよびPerl APIが付属しているため、独自の静的解析ツールをカプセル化して記述する抽象構文ツリーを活用することができます。私はこのAPIを使ってたくさんのツールを書いてきました。

とにかく、それはSciToolsによって書かれています。 http://scitools.comと私はそれらのために動作しません。私は彼らの製品が気に入っています。実際、私は数年前にC APIをラップしてCodePlexに投稿したC#APIを書いていました。静的解析ツールを書くためにCやPerlを使うのは当然です。

0

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

多分それの代わりに、あなたがプランC++でそれをどうやって行うことができるかを試してみるでしょう。工場設計パターンを実装することを心に留めている可能な解決策の1つです。ファクトリ内のすべてのデータ型を反復処理して、スーパーリストに追加するよりも、

ack ": *public ParticularClass" *.h 
:あなたは常に1行で継承を宣言した場合仕事をすることができます ack(簡単なgrepの交換)を使用して

任意の方法、

関連する問題