【发布时间】:2013-05-28 04:03:26
【问题描述】:
所以我想测试我的对象是药水还是武器。我如何使用 typeid 来做到这一点(即或任何与此相关的东西)?
然后我想根据这个条件实例化一个对象。我不能只说 T temp 因为那会实例化一个抽象基类(即我的 Item 类中有一个纯虚函数)。
template <typename T>
void List<T>::Load(std::ifstream & file)
{
//Read the number of elements
file.read(reinterpret_cast<char *>(&mNumberOfNodes), sizeof(int));
//Insert nodes into list
//If object is a potion
//T * temp = new Potion;
//If object is a weapon
//T * temp = new Weapon;
for( int i = 0; i < mNumberOfNodes; i++ )
{
temp->Load(file);
this->PushFront(&temp);
mNumberOfNodes--;
mNumberOfNodes--;
}
}
【问题讨论】:
-
你看过factory pattern吗?
-
哈!我希望我有。我明年学习软件设计模式,但我会尝试理解这篇文章。 :(
-
dynamic_cast 是一种方式。
-
对象的名称在哪里
-
另外,由于您使用的是模板,您可能希望将“创建新对象的函数”设为模板参数或函数参数,以便函数本身不会开始做出假设关于对象。对于 11 之前的 C++,您需要一个仿函数对象;对于 C++11,您需要使用
std::function。
标签: c++ polymorphism typeid