2013-03-13 39 views
0

我有哪裏模板類/功能經常訪問輸入型的明確的成員,像這樣的庫:對於C++模板,有沒有辦法找到「有效」輸入的類型?

template < 
typename InputType> 
bool IsSomethingTrue(
    InputType arg1) { 

    typename InputType::SubType1::SubType2 &a; 

    //Do something 

} 

這裏,SubType1SubType2本身是用來實例InputType泛型類型。有沒有辦法快速查找庫中有效傳入的所有類型(InputType)到目前爲止,我一直在搜索包含相應成員的類的整個代碼庫,但模板輸入名稱在很多地方被重用,因此非常麻煩。

從編碼的角度來看,當只有一組有限的輸入類型可能已經被定義時,使用這樣的模板有什麼意義?爲什麼不只是用明確的類型重載這個函數而不是使它們成爲通用的?

+1

爲什麼你需要這樣做? – 2013-03-13 20:00:46

+0

我想將庫中的選定函數移植到python;我會直接使用這個庫,但是我在一個封閉的IS上工作,在那裏獲得必要的第三方庫是很困難的。 – 2013-03-13 20:09:21

回答

0

使用泛型類型的好處不在模板的最後:如果你願意明確地命名它們並每次編輯模板代碼,它都是一樣的。

但是,當您引入模板接受的類型的子類或變體時會發生什麼?另一端不需要修改。

換句話說,當你說事先知道所有類型時,你不包括代碼修改和擴展,這是使用模板的一半。

2

從編碼的角度來看,當只有一組有限的輸入類型可能已經被定義時,使用這樣的模板有什麼意義?爲什麼不只是用明確的類型重載這個函數而不是使它們成爲通用的?

首先,因爲那些超載會有完全相同的身體或非常相似的身體。如果函數的主體足夠長,那麼更多版本的維護就成了問題。當你需要改變算法時,你現在必須做N次,並希望你不會犯錯誤。大多數時候,冗餘是不好的。

此外,儘管現在可能只有少數這樣的類型滿足您的函數的語法要求,未來可能會更多。有了函數模板,您可以讓您的算法使用新類型,而無需在每次引入新類型時編寫新的過載。

相關問題