【问题标题】:Usage of typelist类型列表的使用
【发布时间】:2011-07-31 16:05:39
【问题描述】:

Typelist(在 Alexandrescu 的意义上定义它)是否主要/本质上对生成类的层次结构有用(也许对于像 boost::tuple 这样的类) 还是有很多其他领域类型列表非常有用?

【问题讨论】:

  • 您是指 Alexandrescu 的类型列表概念,如“现代 C++ 编程”中所述?

标签: c++ typelist


【解决方案1】:

Ulrich W. Eisenecker、Frank Blinn 和 Krzysztof Czarneck 描述的 Mixin-Based Programming in C++ 也使用了它。

【讨论】:

    【解决方案2】:

    我相信您指的是模板链接列表之类的东西。

    这是模板元编程的基本结构。模板元编程有多种应用,程序员在模板中编码问题,元程序实现算法来解决它。

    Boost Spirit 经常被引用为模板元编程的主要例子,尽管很遗憾我不能告诉你太多。

    【讨论】:

      【解决方案3】:

      在我看来,类型列表最有用的是作为其他通用库的构建块,而不是直接在客户端代码中使用。如果 Boost 元组或 MPL 足够灵活,可以满足您的需求,请不要使用较低级别的工具。但是,如果您需要这种灵活性,没有什么可以说您不能直接使用类型列表。

      【讨论】:

        【解决方案4】:

        我们使用类型列表作为一种类型安全的组合,但每个子项都可以通过单个接口访问:

        // Defining a typelist:
        typedef TypeList<A,
                TypeList<B,
                TypeList<C, NullType> > > MyTypeList;
        MyTypeList tl;
        
        // Setting values in the typelist:
        A a;
        tl.set(a);
        C c;
        tl.set(c);
        tl.tail().head() = newB;
        
        // Retrieving values from the typelist:
        C c = tl.get<C>();
        B b = tl.tail().head();
        
        // To reinitialize a value:
        tl.reset<B>();
        tl.set(B());
        
        // To get total size:
        int size = tl.count();
        

        除此之外,还有一个用于迭代的接口和对函子的内置支持。

        好处是您可以根据需要单独或同质对待孩子。

        缺点是你牺牲了一定的抽象性。事情变得更加具体。它还引入了一种处理组合的新方法,对于需要使用代码的其他人来说,这是一种新的学习方法。

        对我们来说,在我们使用它的地方,它非常适合。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-11-14
          • 2017-03-27
          • 2011-05-29
          • 2014-11-27
          • 1970-01-01
          • 2020-07-22
          • 1970-01-01
          相关资源
          最近更新 更多