0

次の行に沿って何かをすることは可能ですか:

type t = int;//this would be a function which identifies what type the next argument is
if( t == int )
    printf( "%d", va_arg( theva_list, t ) );

比較的些細な方法で?タイプを保持できる唯一のオブジェクトは type_info であり、この方法でそれを使用する方法がわかりません。

ありがとう、パトリック

4

4 に答える 4

5

一般的に言えば、いいえ。型は、コンパイル時にのみ実際に格納、操作などできます。実行時に何かが必要な場合は、型を何らかの値 (列挙型など) に変換する必要があります (通常は複雑なメタプログラミングを使用します)。

おそらく、ここで実際に達成しようとしていることについて、もう少し高いレベルの説明を提供した方がよいでしょう。可変引数リストと「型の切り替え」の試みの組み合わせは、電車の衝突が起きようとしているように聞こえます.. .

于 2010-01-22T15:28:36.587 に答える
1

あなたが考えるかもしれない方法ではありません。「int」などの型はコンパイル時に評価されます。実行時に型を評価したい。

おそらく、"t" を関数、または仮想関数を持つクラスのインスタンス (型ごとに 1 つ) に参照させたいと思うでしょう。基本的には、コマンドが「値のフォーマット」であり、コマンドのさまざまなインスタンスがフォーマット可能なさまざまなタイプに対応するコマンドパターンが必要です。

于 2010-01-22T15:29:09.897 に答える
1

特殊化を使用する:

  void smart_print(int t)
  {
     printf("%d", i);
  }
  void smart_print(double f)
  {
     printf("%g", f);
  }

ただし、テンプレートの助けを借りて、期待される関数へのポインターを解決することもできるため、ポインターを型の識別子として扱うと、目的の結果が得られます

于 2010-01-22T15:30:46.523 に答える
0

<<and演算子がストリーム クラスに対してどのように機能するかを確認する必要があります>>(たとえば、cout と cin)。おそらく、問題を解決する方法、つまりオーバーロードされた関数についてのアイデアが得られるでしょう。

于 2010-01-22T15:31:19.970 に答える