我的问题是针对以下结构,是否很难记忆? 我应该避免这种结构吗?感觉合法,但似乎偏离了“常规” 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";
答案 0 :(得分:1)
您编写的方式应该不会引起任何问题。也就是说,所消耗的内存与您将Cons
对中的所有字段都声明为一个结构的结构相同。有一些对齐问题需要考虑,取决于编译器的性能如何,这种问题可能会加剧。我在这里认为结构会更大,因为字段属于不同类型,因此无法更紧密地打包。但这不是问题,除非您明确要求这种包装。
要考虑的一件事是vtables
。如果要添加虚拟功能,则可能需要为每个Cons
(基本上意味着每个字段)支付一个vtable条目的费用。