Esiste un modo in C++ per specificare qualsiasi tipo * come tipo di un modello, ad esempio tramite un carattere jolly o una parola chiave.Qualsiasi tipo generico in classe C++
Mi ricordo in Java che possiamo usare quello? carattere jolly come tipo generico, come HashMap<Long, ?>
.
Provo a spiegare meglio la domanda utilizzando un codice di esempio. Supponiamo di avere la seguente classe Record:
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;
}
};
e supponiamo di voler utilizzare le istanze della classe sopra senza specificare il tipo esatto (io ho usato il nella seguente classe?), Semplicemente perché inutili nel caso in cui la classe di computer utilizza solo il metodo 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;
}
};
Se non si utilizza 'size()', perché non passare un vettore di dimensioni? Perché passare un vettore di 'Record'? Ad ogni modo puoi sempre usare qualche tipo di manichino minimale come 'char'. –
Puoi far funzionare la funzione con qualsiasi tipo di record nello stesso modo in cui hai fatto Record funziona con qualsiasi tipo. – Kevin
E come dice @Kevin, puoi semplicemente rendere 'computeTotalSize' un modello se vuoi gestire diversi tipi di' Record'. Un'alternativa è quella di derivare 'Record' da un'interfaccia che dichiari una funzione virtuale 'size()'. Ma poi il vettore passato dovrebbe essere un vettore di puntatori (possibilmente intelligenti). –