我在头文件中定义了以下模板函数。如何直接从通过模板函数的类型检查类型而不是从变量?
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;
}
这就是我需要能够做到从类型Ť检查,这样我就可以适当地调用函数
popFreeObjectAndAddToActiveListForType(int type)
与正确的值作为其输入。
那么如何在模板函数中这样的情况下进行类型检查呢?
编辑: 从stephen lin和nvoigt得到了一个建议后,我看到这个设计有一个缺陷,但这是因为我已经从我已经完成了它。更容易的是让函数具有另一个类型参数并且不涉及模板,但需要稍后转换为特定类型。无论如何,了解这种情况的解决方案是很好的。
'T *'已经是一个特定的类型,一旦你实例化模板,所以我不清楚为什么你需要检查它。如果你想'T *'映射到'int type'参数的特定常量,那么你需要某种类型的特征。 – 2013-03-03 21:54:09
不能用类型参数调用你的函数吗?像“模板无效popFreeObjectAndAddToActiveListForType()”?为什么要有类型的int? –
nvoigt
2013-03-03 21:57:19
@haxpor什么nvoight说 – 2013-03-03 22:00:13