这里我正在创建一个带有成员函数的circular linked list ( template <class t> class clist; )
,concat ()
用于在另一个列表的末尾连接一个列表。问题在于这个功能。现在,当我使用相同的模板参数连接两个clist
时(假设两者都是clist<int>
),那么函数工作正常,但是一旦我尝试连接两个clists
({{1}然后我需要在函数clist <int> c1
中进行一些转换,因为我对模板知之甚少,所以我实际上想出了如何做到这一点。
所以问题恰恰在于下面程序的最后一行。我有clist <char> c2
其成员函数concat
被调用,而clist <int> c1
正在c1结束时被连接。
concat
无论我尝试什么,它仍会显示错误clist <char> c2
。
有人可以告诉我这里投的正确方法是什么?
答案 0 :(得分:1)
演员实际上是在拯救你制作异类列表。你似乎要做的是连接两个列表 - 一个用int,一个用char。现在从概念上看,这似乎是合理的,但int节点和char节点的结构太不相同了。
唯一可行的方法是将第二个列表复制到一个int的clist然后连接。
答案 1 :(得分:0)
模板参数不是协变的,也不是逆变的; clist<int>
和clist<char>
是完全不同的类型。你无法在它们之间进行转换。由于node
类型的定义包含在模板类型中,因此它也依赖于模板参数,相应的node
类型也同样不同。
每个列表只能包含一种类型。如果您尝试编写可以包含任何类型的列表,则需要使用variant-style类型作为模板参数。