数据类型和多态性

Datatypes and polymorphism

本文关键字:多态性 数据类型      更新时间:2023-10-16

我有一个设计问题。我需要实现接口的自定义数据类型。例如,使用模板很简单(也许下一个设计是不正确的-因为我可以做一个泛型类而不是下一个-但澄清了我的目标):

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种方法来实现这一点,没有一种像使用模板那样优雅和无错误

  1. 在基类中定义数据为int/float/char的联合,并从基类的set/get方法对该联合进行操作。整个VB(旧的VB 6)类系统都在这样一种称为VARIANT的数据类型上工作。
  2. 从基类返回void *,并根据需要强制转换和使用-讨厌&祝你好运! !
  3. 从getData返回基接口引用本身,虽然看起来有意义,但根本没有意义。4 .