Re[2]: Создать новый std::tuple из подмножества имеющегося
От: SaZ  
Дата: 21.02.23 22:18
Оценка:
Здравствуйте, 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 вне этой функции — всё ок.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.