Скажем, у меня есть Filter
metafunction, который фильтрует список типов:Создать «свести на нет» обертка для класса type_traits
template<template<typename> class TFilter, typename... Ts>
using Filter = MetaList</* check TFilter<T>{}() for every type in Ts... */>;
metafunction может быть использован, как это:
Filter<std::is_pod, int, char, std::string, int>
// ...returns...
MetaList<int, char, int>
сейчас , Я хотел бы получить все типы, которые не являются POD. Я мог бы создать метафайл FilterNot
, но мне действительно нужно «отрицание» и в других метафайлах.
Можно ли создать обертку отрицания для любого типа типа-like template class?
Желаемый код:
Filter<Negate<std::is_pod>, int, char, std::string, int>
// ...returns...
MetaList<std::string>
Вы можете написать 'Z {}' 'вместо Z :: value' (см комментарий к вопросу:!'/* Проверить TFilter {}() для каждого типа в Ts ... */'). –
Constructor
@constructor согласился, но решил, что требование поддержки 'constexpr' не стоит (первая версия использовала этот точный синтаксис). – Yakk
Ах, 'constexpr' ... Его поддержка подобна тому, что вы спотыкаетесь снова и снова. – Constructor