gpt4 book ai didi

c++ - 映射不同类型的 vector 指针

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:43:59 25 4
gpt4 key购买 nike

假设我想要一些 vector ,每个 vector 包含不同类型的对象,有什么方法可以将指针映射到它们吗?像这样:

std::vector<class1> vec1;
std::vector<class2> vec2;
std::vector<class3> vec3;

mapper.addVectorPtr(&vec1);
mapper.addVectorPtr(&vec2);
mapper.addVectorPtr(&vec3);

std::vector<class1> * ptr1 = mapper.getVectorPtr<class1>;
std::vector<class2> * ptr2 = mapper.getVectorPtr<class2>;
std::vector<class3> * ptr3 = mapper.getVectorPtr<class3>;

我可能会使用一个带有 vector 指针的自定义类作为成员,它会派生自一个公共(public)基类。然后我可以将它们向下转换为所需的类并检索指针,但我想看看是否有更好的选择。

最佳答案

你应该结帐 http://www.cplusplus.com/reference/typeinfo/type_info/ .您可以通过这种方式获取类型信息。允许您创建一个以整数(= 哈希码)作为键的映射。

然后您可以按如下方式实现您的 map 类(需要一个不带参数的构造函数)

#include <vector>
#include <typeinfo>
#include <map>
#include <iostream>

class typemap{
std::map<unsigned long, void*> m_ptrs;
public:
template<typename A>
void addVectorPtr(std::vector<A>* b){
A a;
m_ptrs[ typeid(a).hash_code() ] = b;
}

template<typename A>
std::vector<A>* getVectorPtr(){
A a;//this is why you need the default constructor
return (std::vector<A>*) (m_ptrs[ typeid(a).hash_code() ]);
}
};


int main(){
std::vector<int>* t1 = new std::vector<int>(3,3);
typemap tm;
tm.addVectorPtr(t1);

std::vector<int> v=*(tm.getVectorPtr<int>());

for(auto it = v.begin(); it!= v.end(); ++it){
std::cout<<*it<<std::endl;
}
}

关于c++ - 映射不同类型的 vector 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24285777/

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