c++ - 类型删除和访问器

标签 c++ templates derived type-erasure

我在 C++ 中使用了类型删除模式,即我用抽象类隐藏了一个模板类

class Base{

  virtual ~Base(){}

 //pure virtual methods...
};

template<typename T>
class Derived : Base{

Derived<T>(){}
~Derived(){}

//public methods...

private :
vector<T> datas;

};

问题:如果我想检索或修改数据,我必须使用基类

如何定义访问器 getDatas() 和 SetDatas(vector datas) ?

最佳答案

您正在尝试实现类型删除,然后询问如何让客户端对您正在删除的类型进行操作。您在此处部署的模式仅适用于 Base 的派生类具有可以在不引用它们存储的具体数据类型的情况下调用的共同操作。如果没有这样的通用操作,并且客户端通过 Base 接口(interface)执行的唯一语义上有用的事情涉及使用派生类的具体类型,那么您将无法使用此设计。

关于c++ - 类型删除和访问器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3585278/

相关文章:

c++ - C++ 中引用使用的影响

c++ - 从基本类型的 vector 访问派生成员

string - 适合不同字符串类的字符串文字

c++ - 如何从派生类访问派生基成员?(在 C++ 中)

c - C和派生数据类型?

c++ - 使用 for_each 标准或 boost 工具优化循环

c++ - 使用两个图像设计 QPushButton

c++ - 使用 OLE 剪贴板和经典剪贴板时出现意外/奇怪的结果,还是我错过了什么?

C++:重载不选择预期的方法

r - 使用 brew/whisker 进行错误安全模板