2011-08-05 38 views
2

讓我們在這個簡單的函數(我的函數的主體較爲複雜,但爲簡單起見):C++:對輸入的任何派生類的載體功能

unsigned VctSize(const vector<Base_class> vct) { 
    return vct.size() 
} 

如何使功能在輸入中接受派生類的Base_class的向量? 而且我可以讓函數接受任何類型的向量嗎?

換句話說,我想編寫一個單一的函數,它接受任何派生類的Base_class矢量,並且只使用矢量操作(派生類沒有成員或成員函數)。

回答

3

這將接受任何類型的載體

template <class T> 
unsigned VecSize(const vector<T>& vct) 
{ 
    return vct.size(); 
} 

爲了接受派生類的唯一載體,可以使用boost::enable_if

template<class T> 
typename enable_if<is_base_and_derived<BaseClass, T>, unsigned>::type 
VecSize(const vector<T>& vct) 
{ 
    return vct.size(); 
} 
+1

你也可以使用類型特徵與靜態斷言限制他們。 –

+0

@Cat:我建議使用enable_if解決方案...雖然我不確定語法 –

+0

@OP:請注意,這完全獨立於任何基本/派生層次結構。如果這與您有任何關聯,請更新問題以包含詳細信息。 –