我有一个基类,目前我有一个名为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