如何改进std::tuple以支持空字段,避免不必要的开销?
支持
std::tuple包含void字段的合理性 我完全认同让std::tuple支持void字段是合理的——只要我们不尝试访问这些void类型的字段,tuple就应该能正常完成实例化。这种设计能在很多实际场景中帮我们避免不必要的资源开销,比如下面这个表格数据结构的例子:
template <typename... T> struct Table { std::vector<std::tuple<T...>> data; std::tuple<std::unordered_map<T, std::vector<size_t>>...> indices; };
在这个结构里,indices的每个字段对应data中tuple的一列,用来给该列数据建立索引以加速查询。但实际场景中,我们往往不需要为每一列都创建索引——如果某一列不需要索引,那对应的unordered_map完全是多余的开销。
要是std::tuple能支持void字段,我们就可以把不需要建索引的列对应的indices字段设为void,这样既保留了结构的一致性,又能避免那些不必要的内存占用和初始化开销,非常实用。
内容的提问来源于stack exchange,提问作者rincewind
相关产品推荐
相关产品推荐

