我在头文件中定义了以下模板函数。
template <class T> T* spawnEnemy(SpawnDirection dir);
我的目的是创建一个通用的生成函数,它接受敌人类型作为模板参数并从函数返回生成的对象。
以下是不正确的实现,但我用它来表达我想要实现的目标。
template <class T> T* ObjectSpawner::spawnEnemy(SpawnDirection dir)
{
if(_enemiesPool->isAnyFreeObjects())
{
T* enemy = NULL;
if(typeof(T*) == Zombie01) // This line is INCORRECT
enemy = dynamic_cast<T*>(_enemiesPool->popFreeObjectAndAddToActiveListForType(ZOMBIE));
else if ...
return enemy;
}
else
return NULL;
}
那就是我需要能够从T进行类型检查,所以我可以适当地调用函数
popFreeObjectAndAddToActiveListForType(int type)
以正确的值作为输入。
那么如何在模板函数中进行类型检查呢?
编辑:在得到了stephen lin和nvoigt的建议后,我发现这个设计有一个缺陷,但这是因为我已经将它加满了。更容易的是让函数有另一个类型参数并且不涉及模板但需要稍后转换为特定类型。无论如何,很高兴知道这种情况的解决方案。