• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst]C++ Vergleich von Typen mittels typeid

Hallo zusammen,

ich habe derzeit folgendes Problem : Ein Funktionstemplate muss mit Array's unterschiedlichen Typs zurechtkommen , jedoch soll es (falls der Typ der übergebenen Objekte "Bool" Arrays sind) auf eine bestimmte Weise handeln.

Hier mein Codebeispiel , dass derzeit nicht funktioniert aber evtl meine Intention klarmacht.
Das Problem ist man kann typeid().name() nicht nutzen um mit integer zu vergleichen, daher son dummy.
Ich darf auch die Funktion nicht um Parameter erweitern damit ich einen bekannten Typ übergebe, gegen den ich vergleichen kann. Also was nun ?

Code:
template <typename T>
T dot(T x[],T y[])
 {
  T res = 0;
  bool test[n];
  cout <<" "<< typeid(x).name()<<" ";
  if ((typeid(x).name() == typeid(test).name()) && (typeid(y).name()== typeid(test).name())) //sind beide Vektoren vom Typ bool?
   {
    bool result = true; //Annahme das alle gleich sind
    for(int i=0 ; i<n ; i++) //Schleife zum testen auf Gleichheit
      {
 	if(x[i] != y[i]) 
	 {
	   result = false;
	   return result;
         }
      }
    cout<<endl;
    return result;
   }
  for(int i=0 ; i<n ; i++)
    res += x[i]*y[i];
  return res;
 }
 

Tooltime

Advanced Hacker
Dominik1981 schrieb:
Da fällt mir nur ein freche Antwort ein, anständiges C++ Buch kaufen und durcharbeiten.

Templates, ob Funktionen oder Klassen, können für bestimmte Typen spezialisiert werden. Einer der wichtigsten Grundgedanken von C++ ist gerade solche Typenermittlungen durch die Hintertür zu vermeiden und Funktionen/Methoden möglichst typengerecht auszuwählen.
Code:
template <typename T>
T dot(T x[],T y[])
{
    // generische Version für alle Typen
}

template <>
bool dot(bool x[], bool y[])
{
    // Explizite Template-Spezialisierung für den Typ bool
}
 
OP
D

Dominik1981

Newbie
Danke.

Programm gibt nun den erwarteten Output. Ich steige derzeit von C auf C++ um und diese ganzen Sachen mit Klassen , Objekten und Funktionstemplates sind mir noch nicht so wirklich klar.
 

Tooltime

Advanced Hacker
Dann hast du wahrscheinlich meinen kleinen Fehler selbst gefunden, die Antwort kam nämlich so aus der Hand geschüttelt. Ich hatte den Templatetyp beim Funktionsnamen vergessen, habe das nochmal in meiner C++-Fibel nachgeschlagen. Für alle Fälle, richtig ist also:
Code:
template <>
bool dot<bool>(bool x[], bool y[])
{
    // Explizite Template-Spezialisierung für den Typ bool
}
 
Oben