C++ - Vorlagen: erhalten Art des Elements

Gibt es zwei Strukturen:

template <typename T>
struct AB
{
    T a, b;

    AB <T> ( ) : a ( 0.0 ), b ( 0.0 ) {}
};


template <typename T>
struct ABList
{
    typedef std::list < AB <T> > Type;
typedef T Type2;
};

und eine Funktion

template <typename List>
void test ( List l )
{
    List::iterator i_l = l.begin();

    //Here *i_l type is needed instead of double
    double val = (*il).a;

}

Gibt es eine Möglichkeit, wie man *i_l templatized Typ (hier double), ich.e,

std::list::Item type

ohne dabei andere parameter, wenn

int main(int argc, char* argv[])
{
ABList <double> ::Type intervals;

test (intervals);


return 0;
}

Danke für Eure Hilfe, C++ 03 ist bevorzugt.

Aktualisiert, Frage

Wenn ein templatized Typ

std::list::Item type

ist eine formale Parameter von test(), diese Lösung

template <typename List>
void test ( List l, typename List::value_type::value_type val )
{
  ...
}

int main(int argc, char* argv[])
{
ABList <double> ::Type intervals;
double x = 7.0;

test <ABList<double>> (intervals, x);

return 0;
}

funktioniert nicht... folgender Fehler tritt auf:

error C2770: invalid explicit template argument(s)

Version

test (intervals, x);

bewirkt, dass ein weiterer Fehler:

Failed to specialize function template 'void test(List,List::value_type::{ctor})'
  • Nicht genau sicher, was du meinst. Möchten Sie std::list::value_type.
  • Eine weitere Möglichkeit: schreiben Sie eigene type_traits für Sie Arten.
  • lösen Sie die explizite template-Argumente für die test-Funktion, versuchen Sie den Aufruf nur test(Intervalle, x) in main() und lassen Sie "template argument Abzug" finden Sie die richtige Entsprechung für die Funktion. Ich habe versucht, und es kompiliert ohne Probleme
  • tomislav: das auslassen einer Spezialisierung bewirkt, dass das scheitern Spezialisierung Fehler.
InformationsquelleAutor justik | 2013-05-07
Schreibe einen Kommentar