递归结构列表上有什么明显的缺点吗?

时间:2018-06-23 19:38:55

标签: c++ struct template-meta-programming

我的问题是针对以下结构,是否很难记忆? 我应该避免这种结构吗?感觉合法,但似乎偏离了“常规” c ++模式。

template<typename a, typename b>
struct Cons {};

...

template<typename a, typename b>
struct head<Cons<a, b>> { using type = a; };

...

template<typename a, typename b>
struct tail<Cons<a, b>> { using type = b; };

...

template<typename list>
struct recursive_list
{
    using head = typename head<list>::type;
    using tail = typename tail<list>::type;

    head curr;
    recursive_list<tail> next;
};

...

recursive_list<Cons<int,Cons<std::string,Nil>>> rl;
rl.curr=1;
rl.next.curr="2";

1 个答案:

答案 0 :(得分:1)

您编写的方式应该不会引起任何问题。也就是说,所消耗的内存与您将Cons对中的所有字段都声明为一个结构的结构相同。有一些对齐问题需要考虑,取决于编译器的性能如何,这种问题可能会加剧。我在这里认为结构会更大,因为字段属于不同类型,因此无法更紧密地打包。但这不是问题,除非您明确要求这种包装。

要考虑的一件事是vtables。如果要添加虚拟功能,则可能需要为每个Cons(基本上意味着每个字段)支付一个vtable条目的费用。