我正在实现四个算法,它们在数据结构上完全相同,只是使用了不同的数据容器 —— 其中两个使用 priority_queue
,一个使用 stack
,最后一个使用 queue
。由于它们相对较长,因此希望只有一个函数模板,接受容器类型作为模板参数,然后每个算法使用适当的参数调用该模板,如下所示:
template <class Container>
void foo(/* args */)
{
Container dataStructure;
// Algorithm goes here
}
void queueBased(/* args */)
{
foo<queue<Item> >(/* args */);
}
void stackBased(/* args */)
{
foo<stack<Item> >(/* args */);
}
我已经成功地使用基于
priority_queue
和stack
的实现方式做到了这一点,但是我无法像处理queue
的算法那样处理,因为它使用不同的名称来访问最前面的元素(front( )
而不是top( )
)。我知道我可以针对这种情况进行特化模板,但那样会有很多重复的代码(这正是我想避免的)。那么实现这个最好的方法是什么呢?我的第一反应是创建一个包装器类来为队列添加一个
top( )
操作,相当于stack
,但我读到了关于子类化STL类的禁忌。那么我该如何获得这个行为呢?