So las ich this article about type erasure. Aber der Code in diesem Artikel scheint teilweise falsch, zum Beispiel:Was ist Typ löschen 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(); }
};
gefolgt von
void pullTheString()
{
MyAnimal *animals[] =
{
new AnimalWrapper(Cow()), /* oO , isn't template argument missing? */
....
};
}
Diese Fehler entmutigten mich vom Lesen weiter in dem Artikel.
Wie auch immer; Kann mir bitte jemand beibringen, welche Art von Löschen in C++ bedeutet, mit einfachen Beispielen?
Ich wollte darüber lernen, um zu verstehen, wie std::function
funktioniert, konnte aber nicht meinen Kopf herumkommen.
verwandt/Betrogene: http://stackoverflow.com/questions/5450159/type-erasure-techniques – NathanOliver
Sie müssen entweder '' passieren, oder eine Funktion verwenden, die 'T' folgert und übergibt' '. Dh, 'template MyAnimal * WrapAnimal (T const & t) {gebe den neuen AnimalWrapper (t);}' zurück und ersetze 'new AnimalWrapper' durch' WrapAnimal'. –
Yakk
@NathanOliver In dieser Frage kennt OP bereits grundlegende Konzepte des Typs Löschen. –