我在頭文件中定義了以下模板函數。如何直接從通過模板函數的類型檢查類型而不是從變量?
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