как я могу удалить элемент из списка типов?

Я реализовал в виде схемы список целых с использованием шаблонов в C ++:

class Empty {};

template <int H, class T = Empty>
struct list {
static const int head = H;
typedef T tail;

};

Я пытаюсь реализовать функцию сортировки, поэтому я решил использовать функцию: remove и find_min.
Алгоритм таков: найдите минимум в списке, создайте список с этим минимумом в качестве заголовка и удалите его из хвоста (остальная часть списка). Что важно, я хочу, чтобы это было реализовано рекурсивно, без каких-либо циклов. Моя min_function:

template <class T,int N>
struct min_elem{};template<int H, class T,int N>
struct min_elem<list<H,T>,N >{static const int value = (N>H ? min_elem<T,H>::value : min_elem<T,N>::value  );

};template<int N>
struct min_elem<Empty,N>{
static const int value=N;
};

template <class T>
struct min{};

template <int I, class T>
struct min<list<I,T> > {

static const int value = min_elem<list<I,T>, I>::value;
};

но я понятия не имею, как реализовать функцию удаления. Я хочу, чтобы это было похоже на функцию min. Кто-нибудь может помочь? Расположение функций должно быть:

template<class T, int K>
struct re{};

template<int I, class T, int K>
struct re <list<I,T>,K>{

typedef list<  ?? don't know what should I exactly do here> value;

};

template<int I>
struct re <Empty,I>{

??

};

0

Решение

Попробуйте так.

template<class T, int K> struct re;

template<int H, class T>
struct re <list<H, T>, H> { // the head and the subject are same value.
typedef T type;
};

template<int H, class T, int K>
struct re <list<H, T>, K>{
typedef list<H, typename re<T, K>::type> type;
};

template<int K>
struct re <Empty, K>{
typedef Empty type;
};
0

Другие решения


По вопросам рекламы [email protected]