【发布时间】:2020-04-30 18:33:38
【问题描述】:
我有一个带有 getter 的向量模式,如下所示:
vector<A>& getA() const { return a; }
vector<B>& getB() const { return b; }
vector<C>& getC() const { return c; }
...
我很想拥有像vector<T>& getByName(string s) const 这样的函数,这样我就可以这样调用函数:getByName("A"),getByName("B") 等等。
我尝试过使用无序地图,但没有找到任何合适的方法来制作这样的线条:unordered_map< string, vector<T> >。
A、B、C...是完全不同的结构体,所以我尽可能不寻找多态解决方案。
由于vector<T> 是一个固定大小的容器(如果我没记错的话,是 24 个字节),我不明白为什么无论向量的类型如何,地图都无法将这些字节存储在内存中的某个位置。
【问题讨论】:
-
如果
AB和C都是不同的类型,那么这是不可能的,因为最大的问题是你不能声明std::vector<T>来保存不同的非多态类型 -
你可以有一个模板函数
get_vector<T>(),它会返回一个vector<T>。但是,T必须在编译时指定,因此如果这是您的想法,它将不适用于运行时值。
标签: c++ templates vector stl unordered-map