Domanda

E 'possibile fare qualcosa sulla falsariga di:

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 ) );

in modo relativamente banale? L'unico oggetto che conosco che può contenere un tipo è type_info e non riesco a capire come usarlo in questo modo.

Grazie, Patrick

È stato utile?

Soluzione

In generale, no. Tipi possono veramente solo essere immagazzinati, manipolati, ecc, al momento della compilazione. Se si desidera qualcosa in fase di esecuzione, è necessario convertire (di solito tramite metaprogrammazione piuttosto peloso) il tipo per un valore di qualche tipo (per esempio, un'enumerazione).

Forse sarebbe meglio se ti ha dato una descrizione di livello leggermente superiore di quello che stai veramente cercando di realizzare qui - la combinazione di elenchi di argomenti variabile con un tentativo di "accensione di tipo" suona come un incidente ferroviario in procinto di accadere ...

Altri suggerimenti

Non nel modo in cui si potrebbe pensare. Tipi come "int" sono valutate al tipo di compilazione. Si vuole valutare un tipo in fase di esecuzione.

Probabilmente si vuole fare "t" di riferimento di una funzione, o di un'istanza di una classe che ha una funzione virtuale, uno per ogni tipo. In sostanza si desidera che il modello di comando, dove il comando è "formattare un valore" e le diverse istanze del comando corrispondono ai diversi tipi che possono essere formattati.

Usa specializzazione:

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

Ma con l'aiuto di modelli che è possibile anche risolvere puntatore a funzione prevista, in modo da trattare puntatore come identificatore di tipo e si otterrà risultato desiderato

Si dovrebbe guardare a come il lavoro degli operatori e << >> per le classi stream (cout e CIN, per esempio). Forse che vi darà un'idea su come risolvere i vostri problemi -. Funzioni vale a dire overload

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top