C ++重构一个带有int或string参数的方法

时间:2017-11-08 01:28:48

标签: c++ refactoring

我一直致力于创建一个存储学生集合的程序。我意识到我基本上使用相同的复制/粘贴代码为我的各种类容器创建基本相同的方法。我决定重构代码并重新编写了大部分代码。我目前面临的问题是使用我的搜索方法。对于我的一些集合,搜索方法获取并返回一个整数ID(例如学生编号),而其他集合则获取并返回字符串ID(例如,课程代码)。我一直在努力弄清楚如何创建一个可以处理这两种情况的方法。

我基本上想要下面的代码,但是我希望它能够获取并返回传递给它的类型(int或string)。请注意,getID()只是一种用于从学生班级返回学生ID或从课程班级返回课程代码的方法。

{{1}}

1 个答案:

答案 0 :(得分:0)

您可以使用模板,例如:

template <typename Collection, typename ID>
auto* find_by_id(Collection& collection, const ID& id)
{
    auto it = std::find_if(std::begin(collection), std::end(collection),
                        [&](const auto* e) { return e->getID() == id; })
    if (it == std::end(collection)) {
        return nullptr;
    }
    return *it;
}