我正在使用 Alexandrescu 的 Modern C++ Design 中定义的类型列表。在他的书中,他谈到了将类型附加到类型列表,但他没有谈到拼接两个类型列表......
我想可以使用 Append 功能拼接两个类型列表,但它不会导致线性时间拼接(而 std::list::splice 是 O(1) )。?
好吧,我知道这个计算时间可以被认为是“免费的”,因为它是编译时间,但我很好奇 :)
谢谢 !
我正在使用 Alexandrescu 的 Modern C++ Design 中定义的类型列表。在他的书中,他谈到了将类型附加到类型列表,但他没有谈到拼接两个类型列表......
我想可以使用 Append 功能拼接两个类型列表,但它不会导致线性时间拼接(而 std::list::splice 是 O(1) )。?
好吧,我知道这个计算时间可以被认为是“免费的”,因为它是编译时间,但我很好奇 :)
谢谢 !
typelist 的概念通常比(双)链表更接近计算机科学的列表概念std::list
。这两个想法有一个共同的名字,但有重要的区别。
由于元程序纯粹是功能性的,因此您不能像这样就地修改输入类型列表std::list::splice
:您必须“生成”输出类型列表,这将是线性的。(但是,惰性可以用来推迟和降低该成本;所支付的确切成本将取决于最终算法。)
*:我说通常是因为 Boost.MPL 支持诸如迭代器和视图之类的东西,它们模糊了界限,至少从用户的角度来看是这样。
(为了论证的目的,假设这里的“CS”列表是指 cons 单元格 + 空列表。)