从STL容器继承可能导致不确定的行为,应避免使用。是否有适应STL容器接口的最佳实践?一遍又一遍地为不同的容器键入所有功能是没有意义的,因此我对一组通用适配器能否完成这项工作以及它们的外观感到很感兴趣。
例如,部分接口是所有容器共有的:
template
<
typename Type,
template<typename, typename> class Sequence,
template <typename T> class Allocator = std::allocator
>
class CommonInterface
{
public:
using container_type = Sequence<Type, Allocator<Type>>;
using value_type = typename container_type::value_type;
using allocator_type = typename container_type::allocator_type;
using size_type = typename container_type::size_type;
using difference_type = typename container_type::difference_type;
...
decltype(auto) begin()
{
return data_.begin();
}
decltype(auto) cbegin() const
{
return data_.cbegin();
}
...
protected:
container_type data_;
};
,但这不适用于std::array
。另外,还有一些支持O(1)直接访问的容器,而有些容器则不支持,因此我可以将接口的一部分提取到通用适配器中(除array
以外的所有东西),并使用继承打开我猜想的接口。
这让我闻起来,而且打字的数量很烦人。
不幸的是,我似乎需要这样的东西,因为我需要在我的库中引入很多不同类型,它们实际上是 STL容器。 m在选择算法时使用标签和SFINAE区分(几何)类型。
编辑:如何对多边形(点的闭合链)和折线(点的 open 链)建模,相同的存储空间)使用任何(可能相同)STL容器?