我想为stl容器创建通用的“包装器”,例如:
template<template <typename, typename...> class Container = std::vector >
class ContainerWrapper{
add();
size();
find();
resize();
sort();
/**/
}
+迭代器。 我希望成员函数具有不同的实现,具体取决于Container提供的方法。 C ++模板系统是否足以创建这个?这是否可行,仅使用标准(没有增强,没有预处理器的混乱)?
我知道如何以艰难的方式去做 - 为每个stl容器编写模板专门化。但我希望它也可以与其他容器一起使用,而且我也在寻找更通用的方法。
另外,这里有什么好处?是继承Container
还是将Container
作为组件?
答案 0 :(得分:1)
STL容器不是要继承的。 They do not have virtual destructors。讨论了having the containers as final,但没有完成,因为它会发生重大变化。
所以使用合成是你最好的选择。
答案 1 :(得分:1)
前段时间我为我的一个项目开发了类似的东西。
我已经提取了一个完整的工作示例(原始代码更复杂),以展示如何使用方法addVal()
(调用push_back()
,push()
,{{ 1}}或insert()
)为包装容器添加值。
此代码适用于push_front()
,std::vector
,std::set
,std::multiset
,std::unordered_set
,std::unordered_multiset
,{ {1}},std::deque
,std::queue
和std::priority_queue
。
其他容器(例如std::forward_list
)可能需要std::stack
的不同专精。
我不想要解释每一行代码,但如果您有疑问,我可以尝试回复(或者,如果您愿意,我可以给您链接我的github项目。)
示例
std::array