Ich habe eine Klasse B, die von A ergibt sich:Wie kann ich den Datentyp zur Laufzeit in C++ ermitteln?
template<class T>
class A
{
class iterator; // Defined fully
iterator begin()
{
// Returns a pointer to the first element
}
iterator end()
{
// Returns a pointer to the last element
}
}
template <class T>
class B : public A
{
// It automatically inherits the iterator
}
template <typename InputIterator>
void foo (InputIterator first,InputIterator last)
{
// Some code to infer whether it is of type A or B
}
Jetzt sind einige Funktion sagen foo()
B::begin()
auf einmal mit und einmal mit A::begin()
genannt wird.
Ich muss während der Laufzeit den Typ bestimmen, um den Typ abzuleiten und einige Flag-Variablen zu setzen. Wie mache ich das? Ich habe versucht, typeinfo()
zu verwenden, aber es gibt den gleichen Wert für beide Iteratoren zurück.
Nicht sicher, was Sie fragen. Sie haben 'InputIterator' - das ist schon der Typ. Beide Iteratoren * sind * vom selben Typ. Fragen Sie, wie man "B :: iterator" von "A :: iterator" unterscheidet? – Barry
Wenn Sie auf verschiedenen Typen unterschiedlichen Code ausführen müssen, warum nicht zwei Überladungen machen, die tun, was benötigt wird, und dann eine allgemeine Funktion aufrufen? – NathanOliver
Ich muss ableiten, ob das übergebene Argument ist von A :: Iterator oder B :: Iterator – PRP