Я хочу добавить тесты GMOCK, чтобы проверить, обращается ли контейнер к правильному методу. Для vector
он должен получить доступ ко второму методу, а для set
он должен получить доступ к первому методу (поскольку set
имеет set.find
). Это моя специализация шаблона:
namespace tools{
struct low_priority {};
struct high_priority : low_priority {};
template<class TSource, class Ty>
auto exists_in(high_priority, const TSource &source, const Ty &item)
-> decltype(source->find(item) != source.end())
{
return source.find(item) != source.end();
}
template<class TSource, class Ty>
auto exists_in(low_priority, const TSource &source, const Ty &item)
{
return std::find(source.begin(), source.end(), item) != source.end();
}
template<class TSource, class Ty>
auto exists_in(const TSource &source, const Ty &item)
{
return exists_in(high_priority{}, source, item);
}
}