为存储在向量或向量中的派生类对象创建模板API
Creating a template API for derived class objects stored in a vector or vectors
我想创建一个模板的API来访问存储在向量向量中的派生类型。外部向量具有每种派生类型的元素。内部向量有这些类型的集合。
std::vector<std::vector<MyBaseClass>* > items;
理想情况下,我想提供一个API,可以在其中添加和访问派生类型的Mybaseclass类型(没有专门模板)。这样的东西:
T& addItem(size_t index, T& item);
T& getItem(size_t index);
这样使用:
AClass : public MyBaseClass {};
BClass : public MyBaseClass {};
addItem<AClass&>(123, item);
addItem<BClass&>(456, item);
AClass& = getItem<AClass&>(123);
BClass& = getItem<BClass&>(456);
缺乏专业模板的原因是,我想启用新的派生类型,而无需其他开发人员必须修改此代码。
因此,有没有办法可以实现这种API,而不必知道派生类型并专业化代码?
是否可以使用联合和模板进行此操作?
注意:内部向量需要连续存储其数据,因此我不使用指针。
NOTE :我正在使用C 11,而无需提升。
谢谢。
可能与这些行:
class FancyStore {
public:
template <typename T>
T& addItem(const T& item) {
void*& raw = store_[typeid(T)];
if (!raw) {
raw = new std::vector<T>();
}
auto v = static_cast<std::vector<T>*>(raw);
v->push_back(item);
return v->back();
}
template <typename T>
T& getItem(size_t index) {
void* raw = store_[typeid(T)];
auto v = static_cast<std::vector<T>*>(raw);
return (*v)[index];
}
private:
std::unordered_map<std::type_index, void*> store_;
};
现场演示。复制,破坏者,错误处理作为读者的练习。
相关文章:
- 从具有自定义排序的向量创建集合
- 我正在寻找一种优雅的方式来从元组向量创建tuple_element向量
- 从类指针的向量创建成员变量的向量
- 从 c++ 中的字符串向量创建一个元组
- 如何在 c++ 中从两个向量创建 JSON 对象?
- 如何在不迭代的情况下从string_view向量创建字符串向量?
- 通过移动从两个向量创建元组向量
- 为结构的向量创建C 矢量迭代器
- C 矢量元素擦除与新向量创建
- 使用向量的向量创建一个尺寸
- C MultiSet从排序的向量创建
- 从向量<T>创建一组字符串
- 使用C 中的向量创建整数集类别
- 从两个原始向量创建一个“特征::矩阵”
- 用向量创建筛子
- 从Vectores的向量创建一个板
- C++内存管理:从函数中的向量创建一个新数组
- 正在使用类中的向量创建类
- 为向量创建临时变量
- 如何在c++中使用模板图类中的向量创建邻接矩阵