Frage

Ist es möglich, etwas entlang der Linien von dem zu tun:

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 einer relativ triviale Weise? Der einzige Objekt Ich weiß, welche eine Art halten kann, ist type_info und ich kann nicht herausfinden, wie es auf diese Weise zu verwenden.

Danke, Patrick

War es hilfreich?

Lösung

Im Allgemeinen nicht. Typen können nur wirklich gespeichert, manipuliert werden, usw., bei der Kompilierung. Wenn Sie etwas zur Laufzeit wollen, müssen Sie konvertieren (in der Regel über ziemlich haariges metaprogramming) vom Typ auf einen Wert von einer Art (zum Beispiel einer Aufzählung).

Vielleicht wäre es besser, wenn Sie eine etwas höheres Niveau Beschreibung gibt, was Sie wirklich versuchen, hier zu erreichen - die Kombination von Variablenargumentlisten mit einem Versuch, bei „-Schalter auf Typen“ klingt wie ein Zugunglück darüber passieren ...

Andere Tipps

Nicht so, wie Sie vielleicht denken. Typen wie „int“ werden bei der Kompilierung Typ ausgewertet. Sie wollen eine Art zur Laufzeit bewerten.

Wahrscheinlich wollen Sie „t“ Referenz eine Funktion oder eine Instanz einer Klasse machen, die eine virtuelle Funktion hat, eine für jeden Typ. Im Grunde wollen Sie den Befehl Muster, wo der Befehl „Wert formatieren“ und die verschiedenen Instanzen des Befehls entsprechen den verschiedenen Arten, die formatiert werden können.

Mit Spezialisierung:

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

Aber mit Hilfe von Vorlagen können Sie auch Entschlossenheit Zeiger auf erwartete Funktion, so behandelt Zeiger als Kennung des Typs und Sie werden gewünschtes Ergebnis

Sie sollten sehen, wie die << und >> Operatoren arbeiten für die Stream-Klassen (cout und cin zum Beispiel). das wird Ihnen vielleicht eine Vorstellung davon, wie Sie Ihre Probleme zu lösen - d. h überladene Funktionen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top