【问题标题】:Exactly same function but data struture returned would be different完全相同的功能,但返回的数据结构会不同
【发布时间】:2019-07-07 05:27:57
【问题描述】:

我有一个函数foo()。我希望它返回 std::queue 或线程安全队列对象。这样做的最佳方法是什么?我考虑过模板,但不确定它们是否适合这种情况。我可以复制并粘贴foo() 的整个正文,其中一个是std::queue foo1(),另一个是MyQueue foo2(),只需更改数据结构的类型。但这会很丑。

【问题讨论】:

标签: c++ templates code-reuse


【解决方案1】:

我认为函数模板很适合这种情况

例如

// 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();
    }
}

【讨论】:

    猜你喜欢
    • 2020-03-12
    • 2020-08-07
    • 2021-12-18
    • 2020-03-03
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    相关资源
    最近更新 更多