[英]container class for constant data with compile time initialization
我搜索的东西是std :: vector,但没有太大的开销,而且比std :: array还要多,因为使用std :: array时,我无论如何都没有存储大小(只能从类型本身知道)。
我要实现的目标:
用“动态”容器编写,就像:
std::map< int, std::vector< std::pair<int,int>>>;
运行时不需要修改,但是运行时需要尺寸信息。 用std :: array替换std :: vector无法正常工作,因为所有地图条目的数组大小都必须相同,这不是我所需要的。
我只是! 想问一下周围是否已有可用的实现。 如果答案仅仅是“否”,则无需建议如何完成这项工作。 我只想不再重新发明轮子:-)
背景:我可以在小型AVR控制器上使用stl,但是开销“有点”高。 因此,我希望寻找一种标准的实现方式,该实现方式应符合begin()/ end()和迭代器等已实现功能的编译时常数表示形式的需要,以满足最低的容器要求,以使其与基于范围的for和其他类型一起使用。
如果我有搜索,也可以使用c ++ 14。
我发现的全部是实现的完整模板,其中对数据的访问也可以是编译时间常数,例如:
container.get<2>()
我也无法使用它,因为我需要运行时变量来访问我的数据。
编辑:使用std :: vector时出现哪个问题/开销:
在使用std :: vector时,我还需要new / delete,这会导致avr具有malloc / free。 我还发现,在avr上,向量本身的初始化对于我使用的每个模板实例都需要大约350个字节的代码。 像operator[]
这样的访问函数以及迭代器都非常小。
为了避免std::vector
的开销 ,您可以改用std::initializer_list
const std::map<int, std::initializer_list<std::pair<int, int>>>
我不太清楚您要寻找的是什么,但我认为您可以通过以下方法实现您所需要的:
std::vector(start, end)
,其中start和end通过N个元素的块进行计算。 从原则上讲您要问的似乎是不可能的。 您说过要避免像矢量一样分配向量的堆分配,但是必须在编译时知道堆栈上类型的大小,并且该类型的所有成员的大小都应相同。 由于map是同质容器,因此值类型必须是具有恒定大小的单个类型。 您可以用一个元组替换该映射,但随后必须在编译时知道所有键。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.