Więc czytałem this article about type erasure. Ale kod w tym artykule wydaje się częściowo błędne, na przykład:Co to jest wymazywanie typów w 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(); }
};
następnie
void pullTheString()
{
MyAnimal *animals[] =
{
new AnimalWrapper(Cow()), /* oO , isn't template argument missing? */
....
};
}
Te błędy zniechęca mnie od czytania dalej w artykule.
W każdym razie; Czy ktoś może zadać pytanie, jaki typ wymazać w C++, za pomocą prostych przykładów?
Chciałem się dowiedzieć, jak działa std::function
, ale nie mogłem się z tym pogodzić.
związane/dupe: http://stackoverflow.com/questions/5450159/type-erasure-techniques – NathanOliver
albo trzeba przejść '' lub użyć funkcji, która wywodzi 'T' i przechodzi' '. Tj., "Szablon MyAnimal * WrapAnimal (T const & t) {return new AnimalWrapper (t);}' i zamień 'nowy AnimalWrapper' na' WrapAnimal'. –
Yakk
@NathanOliver W tym pytaniu OP zna już podstawowe pojęcia wymazywania typu. –