从类型列表中擦除类型 C++ 元编程

Posted

技术标签:

【中文标题】从类型列表中擦除类型 C++ 元编程【英文标题】:Erasing type from a typelist c++ metaprogramming 【发布时间】:2013-01-23 21:22:34 【问题描述】:

c++元编程中Erasing type from a typelist是什么意思。任何人都可以提出任何简单的例子。

    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 型。

【问题讨论】:

Link 【参考方案1】:

来自 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

因此,如果类型列表 TList 提到 intdoublechar - Erase&lt;TList, double&gt;::Result 将返回一个类型列表仅用于 intchar

如果您只是不了解类型列表是什么,那么也许您应该将其作为一个单独的问题发布,或者也在这里提出......

【讨论】:

以上是关于从类型列表中擦除类型 C++ 元编程的主要内容,如果未能解决你的问题,请参考以下文章

编程语言中元功能和元类的含义是什么?

C++模板元编程深度解析:探索编译时计算的神奇之旅

击败从内存中擦除 PE

C ++根据成员函数从向量中擦除对象[重复]

一个从C++初级到C#高级的面试历程

python核心编程学习记录之序列(字符串元组列表)