29 Stimmen

Abfrage von if(T==int) mit Template-Klasse

Wenn ich eine Funktion in einer Vorlagenklasse schreibe, wie kann ich herausfinden, was mein T ist?

z.B..

template <typename T>
ostream& operator << (ostream &out,Vector<T>& vec)
{
if (typename T == int)
}

Wie kann ich die obige if-Anweisung so schreiben, dass sie funktioniert?

8voto

avakar Punkte 31197

Hier entlang.

ostream & operator << (ostream &out, Vector<int> const & vec)
{
    // ...
}

Der Compiler wird diese Funktion der Funktionsvorlage vorziehen, wenn Sie Vector<int> .

Bearbeiten: Ich habe gefunden dieser Artikel in dem versucht wird zu erklären, warum die Überladung der Spezialisierung von Vorlagen vorzuziehen ist.

6voto

siddhant3s Punkte 380

TypeID ist nie eine gute Idee. Es verlässt sich auf RTTI. Übrigens, hier ist Ihre Antwort: http://www.parashift.com/c++-faq-lite/templates.html#faq-35.7

3voto

Khazratbek Punkte 1648

Eine weitere Lösung ist:

if(std::is_same<T, int>::value)
     //It is int
if (std::is_same<T, double>::value)
     //It is double
if (std::is_same<T, long double>::value)
     //It is long double

0voto

Serge Punkte 7578

C++-Vorlagen funktionieren nicht auf diese Weise. Die allgemeine Idee von Vorlagen ist es, etwas auszudrücken, das für viele verschiedene Typen gemeinsam ist. Und in Ihrem Fall sollten Sie Template-Spezialisierung verwenden.

template<class T> ostream& operator<< (ostream& out, const vector<T>& v)
{
    // your general code for all type
}
// specialized template
template<> ostream& operator<< <int>(ostream& out, const vector<int>& vec)
{
    // your specific to iny type code goes here
}

Dann ruft der C++-Compiler diese Funktion auf, wenn Sie den Typ int verwenden, und die allgemeine Implementierung für jeden anderen Typ

std::vector<int> f(5, 5);
std::cout << f;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X