Gibt es in C++ die Möglichkeit, einen beliebigen Typ * als Typ einer Vorlage anzugeben, z. B. durch einen Platzhalter oder ein Schlüsselwort.Jeder generische Typ in C++ - Klasse
Ich erinnere mich in Java können wir das mit dem tun? Wildcard als generischer Typ, wie HashMap<Long, ?>
.
Ich versuche, die Frage mit einem Beispielcode besser zu erklären. Angenommen, wir haben die folgende Record-Klasse:
template<typename T>
class Record
{
private:
T content;
long size;
public:
Record(T _content, long _size)
{
this->content = _content;
this->size = _size;
}
T getContent()
{
return this->content;
}
long getSize()
{
return this->size;
}
};
und nehmen wir an Instanzen der oben genannten Klasse verwenden möchten, ohne den genauen Typ Angabe (I verwendet die in der folgenden Klasse?), Nur weil nutzlos in dem Fall, in dem die Klasse-Computer verwendet nur die Methode Record::getSize()
:
class Computer
{
public:
long long computeTotalSize(vector<Record<?>> recordVector)
{
long long totalSize = 0;
for (vector<Record<?>>::iterator it = recordVector.begin() ; it != recordVector.end(); ++it)
totalSize += (*it).getSize();
return totalSize;
}
};
Wenn nichts außer 'size()' verwendet wird, warum nicht einen Vektor von Größen übergeben? Warum einen Vektor von 'Record' übergeben? Wie auch immer, Sie können immer einen minimalen Dummy-Typ wie "char" verwenden. –
Sie können die Funktion mit jedem Datensatztyp genauso arbeiten lassen, wie Sie Record mit einem beliebigen Typ erstellt haben. – Kevin
Und wie @Kevin sagt, können Sie 'computeTotalSize' einfach zu einer Vorlage machen, wenn Sie mit verschiedenen' Record'-Typen arbeiten wollen. Eine Alternative ist das Ableiten von "Record" von einer Schnittstelle, die eine virtuelle 'size()' Funktion deklariert. Aber dann müsste der übergebene Vektor ein Vektor von (möglicherweise intelligenten) Zeigern sein. –