两个打字员是否可以在固定时间内拼接

Are two typelists spliceable in a constant time?

本文关键字:定时间 拼接 是否 两个 打字员      更新时间:2023-10-16

我正在使用Alexandrescu的Modern c++ Design中定义的类型器。在他的书中,他谈到将一个类型附加到一个打字员,但他没有谈到拼接两个打字员…

我猜可以使用Append功能拼接两个类型列表,但它不会导致线性时间拼接(而std::list::splice是O(1))。

?

嗯,我知道这个计算时间可以被认为是"自由的",因为它是编译时的,但我很好奇:)

谢谢!

类型列表的概念通常*更接近于计算机科学中列表的概念,而不是std::list所代表的(双重)链表。这两种思想名称相同,但有重要区别。

由于元程序是纯函数式的,所以您不能像std::list::splice那样就地修改输入类型列表:您必须"生成"输出类型列表,这将是线性的。(然而,懒惰可以用来推迟和减少成本;那么,支付的确切成本将取决于最终的算法。)

*:我说通常是因为Boost。MPL支持像迭代器和视图这样模糊界限的东西,至少从用户的角度来看是这样。

(为了便于讨论,假设这里的"CS"列表是指cons单元格+空列表)