gpt4 book ai didi

c++ - 数据类型和多态性

转载 作者:太空宇宙 更新时间:2023-11-04 14:07:13 26 4
gpt4 key购买 nike

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

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类成员对应的属性。我的问题:

Is there any way (change design, etc.) to implement generic setter and getter in IDatatype and for any type and thus manipulate the _data attribute of each class without using templates in the interface?

例如:

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 的 union ,并通过基类的 set/get 方法对该 union 进行操作。整个 VB(旧的 VB 6)类系统都在这种称为 VARIANT 的数据类型上工作。
  2. 从基类返回 void * 并适本地转换和使用 - 糟糕,祝你好运!
  3. 从 getData 返回基础接口(interface)引用本身,虽然看起来有意义,但根本没有任何意义。4.

关于c++ - 数据类型和多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16392611/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com