我有兴趣创建一个使用队列作为其实现的一部分的函数,但我想在队列类型上进行模板化,以便它根据模板化的队列类型具有不同的功能。
这是一个基本示例:
template <typename Queue>
void example()
{
Queue a;
a.push(3);
a.push(1);
a.push(2);
while (!a.empty()) {
cout << a.top() << ' ';
a.pop();
}
cout << flush;
}
我想要的是example<stack<int>>()
打印2 1 3
、example<priority_queue<int>>()
打印3 2 1
和example<queue<int>>()
打印3 1 2
。这适用于stack
但priority_queue
不幸queue
的是不提供top
,而是提供front
. 有没有一种简单的方法可以告诉编译器何时看到top
aqueue
来调用front
?
我能想到的唯一解决方法是遵循这个问题如何为 STL 容器实现通用方法,这些容器没有使用模板模板参数的通用接口top
,并为每种数据类型实现我自己的本地方法和改为调用它。不过,这个解决方案似乎非常不优雅,如果可能的话,我宁愿找到另一种方法。
编辑:我使用的编译器支持 C++11,确切地说是 gcc 4.7.0。