所有與模板類交互的代碼都必須使用模板嗎?所有與模板類型交互的代碼都必須使用模板嗎?
想象
template<T>
class Data {
public:
Data(T value) {
this->value = value;
};
T getValue() {
return value;
};
virtual size_t size() = 0;
private:
T value;
};
會有的size()
特定實現幾種可能T
(字符串,整數,等等)。
注意:我可以有一個抽象類,但我不能既沒有構造函數/ getValue,也沒有虛擬方法,因爲我將不得不指定它們的參數/返回值類型。
進一步假設自己需要的功能,如
template<T>
size_t getSize(Data<T> value) {
return value.size();
}
size()
雖然將是每種不同類型的不同,發件人(getSize()
方法)不應該關心T
。
所以問題是爲什麼有必要模板函數,我可以避免它?
如果您只想與單個Data的專業化進行交互,但通常不需要任何Data,則可以避免這種情況。與「Data」互動不需要模板,但通常會與「Data 」進行交互,因爲Data的每個專門化實際上都是不同的類型。嘗試添加'static_assert(std :: is_same ,數據> :: value,「類型不同。」);'代碼,你會看到它。 –
也許你正在尋找[類型擦除技術](http://stackoverflow.com/documentation/c%2b%2b/2872/type-erasure) –