我有一個基類,目前我有一個名爲get_value()的方法,它應該返回適當地轉換爲各種基元數據類型的值。因爲,我們不能有這僅返回類型不同的虛擬方法,我必須做到以下幾點:虛擬功能設計問題
virtual void get_value(unsigned int index, unsigned char & r) const = 0;
virtual void get_value(unsigned int index, char & r) const = 0;
virtual void get_value(unsigned int index, unsigned short & r) const = 0;
virtual void get_value(unsigned int index, short & r) const = 0;
virtual void get_value(unsigned int index, unsigned int & r) const = 0;
virtual void get_value(unsigned int index, int & r) const = 0;
virtual void get_value(unsigned int index, float & r) const = 0;
virtual void get_value(unsigned int index, double & r) const = 0;
這是從一個維修點很煩人,也是使用是有點尷尬的用戶做這樣的事情:
unsigned char v;
obj->get_value(100, v);
不管怎麼說,事實上,所有的子類必須覆蓋每個這些類型是煩人。我想知道是否有人有任何建議,以避免這種情況,或以某種方式通過只有一個虛擬功能以一種更緊湊的方式做到這一點。
一個子類可以是這樣的:
void get_value(unsigned int index, unsigned char & r) const {get<unsigned char>(index, r);}
void get_value(unsigned int index, char & r) const {get<char>(index, r);}
void get_value(unsigned int index, unsigned short & r) const {get<unsigned short>(index, r);}
void get_value(unsigned int index, short & r) const {get<short>(index, r);}
void get_value(unsigned int index, unsigned int & r) const {get<unsigned int>(index,r);}
void get_value(unsigned int index, int & r) const {get<int>(index,r);}
void get_value(unsigned int index, float & r) const {get<float>(index,r);}
void get_value(unsigned int index, double & r) const {get<double>(index,r);}
,其中本專科模板get方法不針對每個子類的東西。
方法真的需要虛擬嗎? –
我們可以看到這個類的實現例子嗎?你如何存儲這個多態值? – Shoe
該方法確實需要是虛擬的,因爲每個子類都通過多維數組和其他專門的細微差別工作。 – Luca