用于容器的包装容器提供不同的接口

时间:2017-03-29 20:27:31

标签: c++ c++11 containers wrapper variadic-templates

我想为stl容器创建通用的“包装器”,例如:

template<template <typename, typename...> class Container = std::vector >
class ContainerWrapper{
  add();
  size();
  find();
  resize();
  sort(); 
  /**/
}

+迭代器。 我希望成员函数具有不同的实现,具体取决于Container提供的方法。 C ++模板系统是否足以创建这个?这是否可行,仅使用标准(没有增强,没有预处理器的混乱)?

我知道如何以艰难的方式去做 - 为每个stl容器编写模板专门化。但我希望它也可以与其他容器一起使用,而且我也在寻找更通用的方法。

另外,这里有什么好处?是继承Container还是将Container作为组件?

2 个答案:

答案 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::vectorstd::setstd::multisetstd::unordered_setstd::unordered_multiset,{ {1}},std::dequestd::queuestd::priority_queue

其他容器(例如std::forward_list)可能需要std::stack的不同专精。

我不想要解释每一行代码,但如果您有疑问,我可以尝试回复(或者,如果您愿意,我可以给您链接我的github项目。)

示例

std::array