this article about type erasure okuyordum. Ama bu makaledeki kod örneğin kısmen yanlış görünüyor: C++ cinsinden tip silme nedir?
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(); }
};
Bu hatalar daha fazla makalesinde okumasını beni cesaretini
void pullTheString()
{
MyAnimal *animals[] =
{
new AnimalWrapper(Cow()), /* oO , isn't template argument missing? */
....
};
}
izledi.
Neyse; C++'daki tip silme işleminin ne anlama geldiğini basit örnekler ile öğrenebilir misiniz?
std::function
'un nasıl çalıştığını anlamak için bunun hakkında bilgi edinmek istedim, ancak kafamı bulamadım.
ilgili /, yinelenen: http://stackoverflow.com/questions/5450159/type-erasure-techniques Ya, 't' deduces ve '' geçen bir fonksiyonu '' geçmesi veya kullanmak gerekir –
NathanOliver
. Yani, şablon MyAnimal * WrapAnimal (T const & t) {yeni AnimalWrapper (t);} döndürün ve 'yeni AnimalWrapper'ı' WrapAnimal' ile değiştirin. –
Yakk
@NathanOliver Bu soruda OP, halihazırda tip silme ile ilgili temel kavramları bilir. –