数据类型和多态性

时间:2013-05-06 05:43:47

标签: c++ types 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

注意:我没有好英语,对任何错误道歉:)

1 个答案:

答案 0 :(得分:0)

你可以通过3种方式实现这一点,没有像使用模板那样优雅和无错误

  1. 将数据定义为基类中int / float / char的并集,并从基类的set / get方法中对此union进行操作。整个VB(旧VB 6)类系统适用于称为VARIANT的数据类型。
  2. 从基类返回void *并根据需要进行投射和使用 - yuck&amp;祝你好运!!。
  3. 从getData返回基本接口引用本身虽然看起来很有意义但没有任何意义。 4。