Я пытаюсь создать вспомогательную функцию my::find
, которая переносит std::find
для типа std::vector
.Это может быть не очень полезно, но делает код немного чище.К сожалению, я не могу заставить работать тип возврата.См. Пример:
#include <vector>
namespace my {
template<typename T>
inline typename std::vector<T>::iterator::type find(const std::vector<T>& vector, const T& value)
{
return std::find(vector.begin(), vector.end(), value);
}
template<typename T>
inline bool contains(const std::vector<T>& vector, const T& value)
{
return std::find(vector.begin(), vector.end(), value) != vector.end();
}
}
bool a() {
std::vector<float> v;
float a = 0.0f;
auto found = my::find(v, a);
return found != v.end();
}
bool b() {
std::vector<float> v;
float a = 0.0f;
return my::contains(v, a);
}
Я также создал аналогичную функцию my::contains
, которая прекрасно работает.
Когда я пытаюсь использовать my::find
, я получаю ошибку:
[x64 msvc v19.16 #1] error C2672: 'my::find': no matching overloaded function found
[x64 msvc v19.16 #1] error C2893: Failed to specialize function template 'std::vector<T,std::allocator<_Ty>>::iterator::type my::find(const std::vector<T,std::allocator<_Ty>> &,const T &)'
[x64 msvc v19.16 #1] note: With the following template arguments:
[x64 msvc v19.16 #1] note: 'T=float'
Вот божий рывок для этого: https://godbolt.org/z/ri_xoV