首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据对象的类型从向量中检索对象

根据对象的类型从向量中检索对象
EN

Stack Overflow用户
提问于 2015-01-02 23:19:54
回答 2查看 36关注 0票数 0

我有一个模板函数来检索对象:

代码语言:javascript
复制
template <class T>
class SystemManager {
public:
  std::vector<std::shared_ptr<BaseSystem<T>>> container_;

  template <template <typename> class S> // S<T> inherits from BaseSystem<T>
  std::shared_ptr<S<T>> retrieve() {
    return object of type S<T> from container_;
  }
};

有什么方法可以根据对象的类型来检索它吗?有没有办法用std::unordered_map来做?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-02 23:26:28

一种解决方案是迭代vector并对每个元素尝试dynamic_pointer_cast,返回成功的第一个元素。

如果可以更改容器,另一种解决方案是使用mapunordered_map,其中std::type_index作为键,shared_ptr作为值。

票数 4
EN

Stack Overflow用户

发布于 2015-01-02 23:22:47

一个基本的解决办法是

代码语言:javascript
复制
#define STRING 1
#define INT    2
...
vector<pair<x,y>> container;

if(container[i].first == STRING)
// do something

其中,对的第一个元素是类型为int。在将元素添加到向量之前(假设),您已经知道它是什么类型了,并将其存储为对。

代码语言:javascript
复制
container.push_back(make_pair(TYPE, myrealdata);

另一个解决办法是

代码语言:javascript
复制
vector<MyClass> container

class MyClass
{
    int type = STRING;
}

其他类继承MyClass并检查该值的类型。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27749896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档