我有一个功能foo()
。我想要它返回一个std::queue
或一个线程安全的队列对象。这样做的最佳方法是什么?我考虑过模板,但不确定它们是否适合这种情况。我可以复制并粘贴foo()
的整个主体,其中一个是std::queue foo1()
,另一个是MyQueue foo2()
,只是改变数据结构的类型。但那会很难看。
我认为功能模板适合这种情况
EG
// Example program
#include <iostream>
#include <queue>
// Create a different type of queue
template <typename T>
struct another_queue : std::queue<T> {};
// Your function foo
template<typename T>
T foo()
{
T q;
for (auto v : {1, 2, 3, 4})
q.push(v);
return q;
}
int main()
{
auto a = foo< std::queue<int> >();
while (not a.empty())
{
std::cout << a.front() << "\n";
a.pop();
}
auto b = foo< another_queue<int> >();
while (not b.empty())
{
std::cout << b.front() << "\n";
b.pop();
}
}