Я ищу способ удалить (пусть теперь все вхождения) тип из пакета параметров шаблона. Конечным результатом будет структура, которая выглядит так:
template<typename T, typename...Ts>
struct RemoveT
{
using type = /* a new type out of Ts that does not contain T */
}
Скажем, что маргинальный регистр RemoveT<int, int>
обрабатывается возвратом void
(не обрабатывается в следующем коде). Мой первоначальный дизайн выглядит следующим образом:
// --------------------------------------------------------------
// 1. A "way" of typedefing variadic number of types ------------
template<typename...Ts>
struct pack {
using type = Ts;
};
// --------------------------------------------------------------
// --------------------------------------------------------------
template<typename T, typename...Ts> struct RemoveT;
template<typename T, typename T1, typename...Ts>
struct RemoveT {
using type = typename pack<T1, typename RemoveT<T, Ts...>::type>::type;
};
template<typename T, typename T1>
struct RemoveT<T, T1> {
using type = T1;
};
template<typename T, typename...Ts>
struct RemoveT<T, T, Ts...> {
using type = typename RemoveT<Ts...>::type;
};
// --------------------------------------------------------------
Теперь я даже не могу начать тестировать этот код, потому что структура pack
недействительна С++
Повторение
На всякий случай это полезно для ответа, некоторые другие проблемы при его решении
- Можно утверждать, что
pack
вообще не полезен. Вместо этого мы могли бы перемещаться вокруг структурыRemoveT
, создавая новыйRemoveT
, который содержит только те типы, которые необходимы. Затем проблема преобразуется при извлечении типов из структуры - Мы могли бы создать пары типов, которые имитируют поведение typelists и используют для этого более рекурсивный подход.
Нижняя линия
Для переменных типов Ts
и типа T
: Могу ли я создать Us
из Ts
ommiting T
?