【发布时间】:2017-04-10 14:00:29
【问题描述】:
这有点类似于我以前的question,我正在尝试实现一个模板化的 Map 类。
template<typename T, size_t M> class Array { ... } // Fixed-size container
template<typename T> class Vector { ... } // Variable-size container
方法一:
template<typename KeyContainer, typename ValueContainer> class Map
{
KeyContainer keys;
ValueContainer values;
}
这里的问题是我不能保证两个容器是一样的,用户可能会传递一个Array<T, M>作为键容器,一个Vector<T>作为值容器,一旦映射开始超过大小,就会导致问题在Array<T, M> 模板中指定。
方法二:
template<typename KeyType, typename ValueType, template<typename> class Container> class Map
{
Container<KeyType> keys;
Container<ValueType> values;
// What if Container is an Array<T, M>?
}
但正如我之前链接的问题中所展示的那样,这样做似乎是不可能的:接收具有不同参数计数的容器模板,除非有一些我不知道的巧妙模板技巧。
方法三:
实施方法 1 并在文档中添加注释,告诉用户KeyContainer 和ValueContainer 必须是同一类型的容器。
问题: 解决这个问题的最佳方法是什么?
【问题讨论】:
-
为什么要为
Map指定一个容器?如果你想复制std::map的功能,你需要实现一个RB-Tree。 -
最优是什么意思?有什么限制?目标是什么?
-
@NathanOliver 忘了说我这样做是为了练习,所以我没有提到 STL 容器。至于为
Map指定容器的问题,我希望这个类足够灵活,能够接受任何类型的容器实现。
标签: c++ templates dictionary containers