【发布时间】:2016-04-21 07:25:24
【问题描述】:
所以我正在阅读this article about type erasure。但是那篇文章中的代码似乎部分不正确,例如:
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(); }
};
紧随其后
void pullTheString()
{
MyAnimal *animals[] =
{
new AnimalWrapper(Cow()), /* oO , isn't template argument missing? */
....
};
}
这些错误使我不愿继续阅读本文。
无论如何;谁能通过简单的例子教一下 C++ 中的类型擦除是什么意思?
我想了解它以了解 std::function 的工作原理,但无法理解它。
【问题讨论】:
-
您要么需要传递
<T>,要么使用推导出T并传递<T>的函数。即template<class T> MyAnimal* WrapAnimal(T const& t){return new AnimalWrapper<T>(t);},并将new AnimalWrapper替换为WrapAnimal。 -
@NathanOliver 在那个问题中,OP 已经知道类型擦除的基本概念。
-
我没有看到错误。不会简单地推导出模板参数吗?
-
@AdrianMcCarthy 先生,类模板不是这种情况,构造函数不会为类模板推断模板参数 AFAIK。
标签: c++ type-erasure