Вы можете написать свой шаблон так:
template<typename T>
std::vector<T> Where(std::vector<T> input, std::function <bool (T)> f)
{
std::vector<T> v;
for (auto it = input.begin(); it != input.end(); ++it)
if (f(*it))
v.push_back(*it);
return v;
}
Но тогда вы должны вызвать его так:
auto test = Where <DTO> (numbers2, [](DTO dto)
{
...
});
Live демо
Редактировать: Если вы когда-нибудь захотите передать не захватывающую лямбду, вам будет немного удобнее определить ваш шаблон следующим образом:
template<typename T>
std::vector<T> Where(std::vector<T> input, bool (* f) (T))
...
Но вы все равноМне нужно «дополнительное оборудование» на сайте вызова, на которое ссылаются гонки на легкость на орбите (я думаю, что вычитание шаблона не удастся, потому что количество параметров шаблона больше не соответствует количеству параметров, переданных Where
).
Live демо
В общем, придерживайтесь своего исходного кода.