数据类型和多态性
Datatypes and polymorphism
我有一个设计问题。我需要实现接口的自定义数据类型。例如,使用模板很简单(也许下一个设计是不正确的-因为我可以做一个泛型类而不是下一个-但澄清了我的目标):
template <typename T>
class IDatatype
{
public:
virtual T getData() const = 0;
virtual void setData(T pData) = 0;
};
class MyChar: public IDatatype<char>
{
public:
void setData(char pData){...}
char getData() const{...}
private:
char _data;
};
class MyInt: public IDatatype<int>
{
public:
void setData(int pData){...}
int getData() const{...}
private:
int _data;
};
IDatatype<int> *data = new MyInt(); // parametrized interface, bad idea :(
data->getData(); // it works ok
从以前的类中,很容易获得对应于每个_data类成员的属性。我的问题:
有没有办法(改变设计等)在IDatatype中实现泛型setter和getter和任何类型,从而操作每个类的_data属性不用在界面中使用模板?
例如:
class IDatatype
{
public:
// pure virtual getters and setters for specialized _data fields. Here is my design question.
};
class MyChar: public IDatatype
{
public:
void setData(char pData){...};
char getData(){...};
private:
char _data;
};
class MyInt: public IDatatype
{
public:
void setData(int pData){...};
int getData(){...};
private:
int _data;
};
IDatatype *intData = new MyInt(); // no parametrized interface!
intData->getData(); // how can I create this method from IDatatype?
IDatatype *charData = new MyChar();
charData->getData(); // the same here
注意:我的英语不太好,如有错误,我深表歉意:)
您可能有3种方法来实现这一点,没有一种像使用模板那样优雅和无错误
- 在基类中定义数据为int/float/char的联合,并从基类的set/get方法对该联合进行操作。整个VB(旧的VB 6)类系统都在这样一种称为VARIANT的数据类型上工作。
- 从基类返回void *,并根据需要强制转换和使用-讨厌&祝你好运! !
- 从getData返回基接口引用本身,虽然看起来有意义,但根本没有意义。4 .
相关文章:
- 如何使用静态多态性在 int 和指针类型之间进行转换?
- 如何调用指针类型的方法(禁用多态性)?
- 如何为多态性中的指定类型分配内存
- C 多态性:允许模棱两可的成员类型
- 如何避免使用模板类型的派生类进行多态性动态强制转换
- 从具有多态性的类中检索数据
- 自动复制=按值并支持多态性的适当类型的非静态字段
- 具有不同模板类型的子类的多态性
- 多态性并获取C++中的对象类型
- 多态性(继承)和价值类型
- c++多态性:基类的上转换/下转换和容器,缺少数据
- C++技术:类型擦除与纯多态性
- 多态性和类型转换
- 多态性不适用于相同数据类型(Base和Inherited类)的函数返回值
- 具有引用数据类型的函数多态性
- 使用多态性创建"类型数组"
- C++多态性与类型
- 使用多态性是在一个容器中存储不同数据类型的好方法吗?
- 数据类型和多态性
- c++多态性和类型转换