我一直致力于创建一个存储学生集合的程序。我意识到我基本上使用相同的复制/粘贴代码为我的各种类容器创建基本相同的方法。我决定重构代码并重新编写了大部分代码。我目前面临的问题是使用我的搜索方法。对于我的一些集合,搜索方法获取并返回一个整数ID(例如学生编号),而其他集合则获取并返回字符串ID(例如,课程代码)。我一直在努力弄清楚如何创建一个可以处理这两种情况的方法。
我基本上想要下面的代码,但是我希望它能够获取并返回传递给它的类型(int或string)。请注意,getID()只是一种用于从学生班级返回学生ID或从课程班级返回课程代码的方法。
{{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;
}