我正在实现四种算法,除了它们使用的数据结构外,它们完全相同——两种使用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( )
与 's 等效的操作stack
,但我一直在读到子类化 STL 类是一个禁忌。那我应该如何得到这种行为呢?