2

私が次のものを持っているとしましょう:

void *pA;

実行時に、このポインターをコンパイル時に不明な型に変換したいと考えています。つまり、ANSI C で c++ dynamic_cast と同等またはエミュレートする方法は何ですか?

ありがとう !

4

2 に答える 2

2

実行時に、このポインターをコンパイル時に不明な型に変換したいと考えています。つまり、ANSI C で c++ dynamic_cast と同等またはエミュレートする方法は何ですか?

まあ、それはそうでdynamic_castはありません。コンパイル時に不明な型にキャストすることはできません。

さまざまな条件に応じてプログラムの実行中に変化する可能性のある型にオブジェクトをキャストする必要がある場合は、いくつかの変数 (および列挙値など) をチェックしてどのキャストにキャストするかを決定する switch ステートメントを作成するのと同じくらい簡単です。実行。その後、既知のタイプで動作します。


余談ですが、提案されたソリューションを実装する方法ではなく、高レベルの問題を説明することをお勧めします (意味がある場合とない場合があります)。あなたのアプローチには、あなたが思い描いたものよりも優れた代替案が存在するかもしれませんが、解決しようとしている問題が何であるかを知らずに提供することはできません.

于 2012-09-07T18:50:19.513 に答える
1

このようなものがうまくいくかもしれません:

void get_val(void * buf, void *data, int type_id) {
  switch (type_id) {
    case INT: int *sp = (int*)data;
              int *dp = (int*)buf;
              *dp = *sp; 
              // or just *((int*)buf) = *((int*)data)
              break;
    case FLOAT:float *sp = (float*)data;
               float *dp = (float*)buf;
               *dp = *sp; 
               break;
   /* ... */
  }
}
于 2012-09-07T18:47:48.183 に答える