2014-03-02 25 views

回答

21

你不能傳遞這樣的類型,因爲類型不是對象。它們在運行時不存在。相反,你想有一個模板,它允許你在編譯時實例化不同類型的功能:

template <typename T> 
void foo() { 
    cout << sizeof(T); 
} 

你可以調用這個函數,例如,foo<int>()。它將用int替換T的實例化函數版本。看起來function templates

+0

只有在你不關心編譯速度的情況下才能做到這一點。 –

+0

@RayGarner你是什麼意思?不是兩個模板實例化只會像兩個類一樣昂貴嗎?我的理解是模板增加了編譯時間,因爲隱藏的類,而不是因爲模板在某種程度上昂貴。 – TankorSmash

+0

@TankorSmash只要它足夠小的項目和規模,你不需要爲它擔心就可以實現正確的規模。然而,每一個小項目都會變成一個大項目,以防萬一FNG被讀取,只是希望他們在編譯時意識到這種交易。 –

8

正如約瑟夫曼斯菲爾德指出的,一個函數模板將做你想做的。在某些情況下,它可能是有意義的一個參數添加到功能,所以您不必顯式地指定模板參數:

template <typename T> 
void foo(T) { 
    cout << sizeof(T) 
} 

這允許您調用函數爲foo(x),其中x是一個變量T型。無參數版本將不得不被稱爲foo<T>()