Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Templates "zur Laufzeit" -> switch vermeiden

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
05.10.2007, 14:18 Uhr
~gusto
Gast


Hallo,


Ich würde gerne folgenden Code so "vereinfachen", dass das switch statement entfällt. Nun bin ich mir nicht sicher ob es überhaupt geht - evtl. irgendwie über virtuelle Funktionen oder so?


C++:
    Matrix<double> *A_REAL = NULL;      
    Matrix<COMPLEX> *A_COMPLEX = NULL;
                      
        switch(o_rm.Get_Type(file))
    {
        case real:  
        {
            std::cout << "\t    Input is REAL!" << std::endl;

            o_rm.Read_Matrix(file, &A_REAL);          
                  
            // Mache was mit A_REAL;      
              
                  
            delete A_REAL;  
            break;
        }                    
         case complex:
        {
             std::cout << "\tInput is COMPLEX" << std::endl;
                  
                       o_rm.Read_Matrix(file, &A_COMPLEX);
        
                       // mache was mit A_COMPLEX

                delete A_COMPLEX;  
          
            break;      
        }                



In Read_Matrix gibt es Template-Spezifikationen, die unterschiedlich vom Template, die Matrix unterschiedlich aufbauen. Braucht ihr noch mehr Informationen?
Ich kann also erst zur Laufzeit entscheiden welches Template benutzt wird...
Das ganze läuft in meiner main(), also in keiner Template Klasse

Könnte das irgendwie über virtuelle Methoden bzw. das Template Method Pattern gehen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.10.2007, 14:38 Uhr
0xdeadbeef
Gott
(Operator)


templates werden immer zur Laufzeit konkretisiert. Ich gehe davon aus, dass Matrix für unterschiedliche Typen unterschiedliche Interfaces bereitstellen wird, also wirst du da auch mit Vererbung und einer factory-pattern nicht weiterkommen.

Das einzige, was ich da sehe, ist den gesamten Algorithmus zu templatisieren, das heißt etwa eine dieser beiden Formen (oder vergleichbares):

C++:
template<typename T> void do_stuff_with_matrix(Matrix<T> &m) {
  // ...
}

template<typename T> void do_stuff() {
  Matrix<T> m;

  // ...
}

// und in der Anwendung dann entsprechend

Matrix<double> a_real;
do_stuff_with_matrix(a_real);

do_stuff<double>();


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: