Здравствуйте, Voivoid, Вы писали:
V>Здравствуйте, SaZ, Вы писали:
SaZ>>Всем добра,
SaZ>>Ломаю голову над следующей задачей. Дан некий тупл, нужно получить новый, в котором будут только определённые типы (например, унаследованные от некоего my_base класса).
SaZ>>Как это сделать?
V>Если есть C++17, то можно как-то так — https://godbolt.org/z/E6K8Pda36
V>V>...
V>
V>В принципе можно и на C++11 написать с помощью рекурсии, но конечно кода получится побольше
Спасибо, то что надо, но я никак не могу осилить enable_if:
// template <typename T, std::enable_if_t<std::is_convertible_v<T*, my_base *>, bool> = true>
// template <typename T, typename = std::enable_if_t<std::is_base_of_v<my_base, T>, bool>>
template <typename T, std::enable_if_t<std::is_base_of_v<my_base, T>, bool> = true>
auto my_filter(const T& v)
{
return std::make_tuple(v);
}
Эта перегрузка никогда не вызывается. Хотя пробовал static_assert вне этой функции — всё ок.