【发布时间】:2018-02-12 04:55:03
【问题描述】:
我正在阅读有关模板元编程的信息。我不明白这些行是什么意思;以下代码涉及对链表进行元编程。
struct NIL {
typedef NIL Head;
typedef NIL Tail;
};
template <typename H, typename T=NIL> struct Lst {
typedef H Head;
typedef T Tail;
};
template <int N> struct Int{ static const int result = N; };
typedef Lst< Int<1>, Lst< Int<2>, Lst< Int<3> > > > OneTwoThree;
以上内容来自https://monoinfinito.wordpress.com/series/introduction-to-c-template-metaprogramming/。 我将非常感谢任何关于拥有 struct NIL 意味着什么的指导,它具有 typedef NIL Head 和 typedef NIL Tail。 Nil 是一种类型,当然,但是如果我有 typedef NIL Head,例如,这是否意味着我在每个 Head 中都有另一个递归 Head 和 Tail?
【问题讨论】:
-
这里有一个关于
NILism 的笑话。 -
我曾经见过一些坏名字,但
NIL就在那儿,因为屡获殊荣的坏名字。这个名字具有惊人的误导性。任何建议这样做的人都是疯狂的科学家,我说的不是好人。 -
大概它代表 Node in List,但最好将其拼写为
NodeInList而不是NIL -
@tadman 它实际上是类似 NULL 的东西的一个非常常见的名称,它用于 LISP 和 Lua(尽管这里的灵感显然是 LISP)。
-
在 C++11 及更高版本中,通常使用
std::tuple实例化作为类型列表。现代 C++(和 Loki 库)中的技术不再非常相关。你最好买一本 2011 年后的书。
标签: c++ templates template-meta-programming