ここで最初に説明したのと同様のシステムを実装しようとしています。つまり、実行時にオブジェクトの動作を変更するために vtable の変更を (悪用) 使用することです。これは、私が取り組んでいる C++ プロジェクトで効率的な型ジェネリック ラッパーを作成する試みの一部です。
例では、アクセスできない場合は、次のように使用して vtablememcpy()
とthis
ポインターをコピーします。
void setType( const DataType& newType )
{
memcpy( this, &newType, sizeof(DataType) );
}
ただし、この方法には問題があります。vtable のコピー元となるターゲット クラスのオブジェクトがなく、作成する必要がないタイプもあります。
そのクラスのオブジェクトなしで、特定のクラスのオブジェクトに埋め込まれた vtable にアクセスする方法はありますか?
ある程度移植性があれば望ましいのですが、私はこれがコンパイラ固有であることを大部分辞任しました。そのため、他に選択肢がない場合は、GCC/G++ のみの方法が受け入れられます。また、かなり標準的な OS とアーキテクチャでこれを構築することだけに関心があると仮定しましょう。
私はC++ 11を使用していますが、それが何らかの形でこれを支援する必要があります。
編集:完全に明確にしたいのですが、この種の行動がどれほど危険であるかを知っています. 私は、このアイデアと、おそらく非常に管理された状況でのその狭いアプリケーションに興味がありますが、私の紹介が示唆するものにもかかわらず、それが製品ソフトウェアにとって良いアイデアであるということよりも興味があります。