Стирание типа из метапрограммирования c++

89
12

В чем смысл стирания типа из списка типов в мета-программировании c++. Можно ли предложить любой простой пример.

    class null_typelist {};

template <class H, class T>
struct typelist
{
typedef H head;
typedef T tail;

};
template<class T1, class T2=null_typelist, class T3=null_typelist, class T4=null_typelist> struct List;

template <class T1, class T2, class T3>
struct List<T1, T2, T3, null_typelist>
{
typedef typelist<T1, typelist<T2, typelist<T3,null_typelist> > > type;

};

template <class H, class T>
class ABC< typelist<H, T> > : public ABC<T>
{
...
};

template <class H>
class ABC< typelist<H, null_typelist> >
{
...
};

struct Elements{};
struct A: Elements{};
struct B: Elements{};
struct C: Elements{};

typedef List<A,B,C>::type MyOBJ;

struct Createobject : ABC<MyOBJ>
{
...

};

int main()
{

Createobject obj;

}

Здесь в этом случае, если мне нужно удалить B из списка типов. можно ли его удалить? и как я могу удалить тип B.

спросил(а) 2013-02-08T09:33:00+04:00 7 лет, 1 месяц назад
1
Решение
51

От Loki Typelist.h:

00233 // class template Erase
00234 // Erases the first occurence, if any, of a type in a typelist
00235 // Invocation (TList is a typelist and T is a type):
00236 // Erase<TList, T>::Result
00237 // returns a typelist that is TList without the first occurence of T

Итак, если упоминание typistist TList говорит, что int, double и char - Erase<TList, double>::Result возвратит список типов только для int и char.

Если вы просто не понимаете, что такое список типов, то, возможно, вам следует опубликовать это как отдельный вопрос или спросить об этом здесь.

ответил(а) 2013-02-08T09:37:00+04:00 7 лет, 1 месяц назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема