两个类型列表是否可以在恒定时间内拼接?

时间:2011-07-16 13:50:25

标签: c++ metaprogramming splice typelist

我正在使用Alexandrescu的Modern C ++ Design中定义的类型列表。 在他的书中,他谈到将类型附加到类型列表,但他没有谈到拼接两个类型列表...

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

嗯,我知道这个计算时间可以被视为“免费”,因为它是编译时,但我很好奇:)

谢谢!

1 个答案:

答案 0 :(得分:2)

类型列表概念通常 *更接近列表的计算机科学概念,而不是std::list的(双重)链接列表。这两个想法有一个共同的名称,但有着重要的差异。

由于元程序纯粹是功能性的,你不能像std::list::splice那样就地修改输入类型列表:你必须“生成”输出类型列表,这将是线性的。 (懒惰可以用来推迟并降低成本;然而,确切的成本将取决于最终的算法。)

*:我之所以说通常是因为Boost.MPL支持迭代器和视图之类的东西,至少从用户的角度来看,它会模糊这条线。

(为了论证的假设,通过“CS”列表在这里我指的是cons单元+空列表。)