2010-11-29 10 views
0

http://codepad.org/etWqYnn3反射パーフェクト転送とVisitorパターン

。私が見ているのは、インタフェースIScope、IType、IMember、IMonikerClient、および上記のCReflexionを含むラッパークラスのセットです。

1)インスタンスにラッパー

2)

3)インスタンスタイプ

を使用するタイプを決定する:ここで重要な部分があるメンバーが、すべてを無視することは、私がやりたいものです私は0Xを使用して、私は転送することができることが判明

4)オーバーロード()および[]のような簡単STDを使用する場合、それが行われるようにコードで)ラッパー(外側から含ま部材にアクセスする::ベクトル

任意の型のパラメータを持つメソッド呼び出し。しかしキャストは変数を取らないので動的にキャストすることはできません(私が気づいていない方法を除いて!)

私は上記の大まかなアイデアをリンクしました。私は現在、さまざまなインターフェイスを処理するswitch文を使用しています。私は明らかな理由から、これを崩壊させたいと思います。私はスイッチのケースでタイプ・マッチ・エラーが発生します。これは、3つのうちの1つのみが条件とコンパイラ・エラーが発生する各ケースに対してコンパイルするメソッドへの呼び出しの原因となります。

誰かが私に何かを提案できますか?それはVARIANTに固執すること以外は:/

ありがとう!

+0

1.「リフレクション」ではなく「リフレクション」です。 2.リフレクションのようなものを実現するには、すべてのメソッド/スコープ/クラスなどに手動で注釈を付ける必要があります。あなたは、C++が探している情報の種類を公開していないため、問題にぶち当たっています。 3。あなたは "A" "B"または "C"よりもあなたの構造のより良い名前を考えることができませんでしたか? –

答えて

1

C++では、「0x土地」でも、リフレクションのようなものを作成するために必要な情報は公開されません。

0xを使用すると、任意のタイプのメソッド呼び出しをパラメータとして転送できます。

タイプをパラメータとして転送することはできません。 const volatile修飾子をメンバに転送することはできますが、コンパイル時にはすべてテンプレートで行われます。フォワードのようなものを使用しているときは、実行時のチェックはこれまでに行われません。

オペレータのためにそこにあなたのテンプレートは、()すべてを一度に、Tint*に変換可能でない限り、コンパイルしようとしてstring*、およびA**されていません。テンプレートは、あなたのためにいくつかの関数を生成する単純な検索と置き換えのアルゴリズムと考えることができます。テンプレートのインスタンス化時にTの値が型名に置き換えられ、関数は通常どおりコンパイルされます。

最後に、dyanmic_castを使用してクラス階層をキャストすることができます。全く関係のないタイプAとBのキャストは正しく動作しません。

リフレクションをまったく使用しないようにデザインを考え直すのがよいでしょう。とにかく、反射のある言語でさえも考慮すると、おそらく反射は、貧弱なデザインを紙にするためによく使われます。