Quindi stavo leggendo this article about type erasure. Ma il codice in tale articolo sembra parzialmente errata, ad esempio:Che cos'è la cancellazione di tipo in C++?
template <typename T>
class AnimalWrapper : public MyAnimal
{
const T &m_animal;
public:
AnimalWrapper(const T &animal)
: m_animal(animal)
{ }
const char *see() const { return m_animal.see(); }
const char *say() const { return m_animal.say(); }
};
seguito da
void pullTheString()
{
MyAnimal *animals[] =
{
new AnimalWrapper(Cow()), /* oO , isn't template argument missing? */
....
};
}
Questi errori mi scoraggiati dal leggere oltre in questo articolo.
In ogni caso; qualcuno può insegnare quale tipo di cancellazione in C++ significa, con semplici esempi?
Volevo saperne di più per capire come funziona std::function
, ma non riuscivo a capirlo.
correlati/vittima: http://stackoverflow.com/questions/5450159/type-erasure-techniques – NathanOliver
Si sia necessario passare '', o utilizzare una funzione che deduce 'T' e passa' '. Cioè, 'modello MyAnimal * WrapAnimal (T const & t) {restituisce nuovo AnimalWrapper (t);}', e sostituisce 'new AnimalWrapper' con' WrapAnimal'. –
Yakk
@NathanOliver In questa domanda, OP conosce già i concetti di base della cancellazione dei tipi. –