Templates c++;可容纳任何类型的模板链接列表 如何定义一个列表,它可以在C++中保存不同类型的对象,就像Python列表一样?我尝试了以下代码 #include <iostream> template< typename t > struct Node { t val; Node *next; }; int main() { Node<int> a; a.val = 1; Node<char> b; b.val = 'b'; a.next = &b; b.next = NULL; } #包括 模板 结构节点{ t值; 节点*下一步; }; int main(){ 节点a; a、 val=1; 节点b; b、 val='b'; a、 下一步=&b; b、 next=NULL; }

Templates c++;可容纳任何类型的模板链接列表 如何定义一个列表,它可以在C++中保存不同类型的对象,就像Python列表一样?我尝试了以下代码 #include <iostream> template< typename t > struct Node { t val; Node *next; }; int main() { Node<int> a; a.val = 1; Node<char> b; b.val = 'b'; a.next = &b; b.next = NULL; } #包括 模板 结构节点{ t值; 节点*下一步; }; int main(){ 节点a; a、 val=1; 节点b; b、 val='b'; a、 下一步=&b; b、 next=NULL; },templates,types,Templates,Types,但编译器给出了以下错误: main.cpp:14:15: error: cannot convert 'Node<char>*' to 'Node<int>*' in assignment a.next = &b; ^ main.cpp:14:15:错误:无法将中的“Node*”转换为“Node*” 分配 a、 下一步=&b; ^ 此代码存在两个问题,第一个问题是节点的下一个成员没有定义模板类型,通常在这种情况下,如果要创建一个

但编译器给出了以下错误:

main.cpp:14:15: error: cannot convert 'Node<char>*' to 'Node<int>*' in 
assignment
     a.next = &b;
           ^
main.cpp:14:15:错误:无法将中的“Node*”转换为“Node*”
分配
a、 下一步=&b;
^

此代码存在两个问题,第一个问题是节点的下一个成员没有定义模板类型,通常在这种情况下,如果要创建一个泛型类型的链接列表,您可以执行类似于
Node*next
的操作。第二个事实是,您正在将似乎是节点*的内容分配给节点*

如果您试图创建一个不同类型的链接列表,那么您不能这样做。简单地说,原因是您必须为
t
参数传入一个类型,因此每个节点必须定义一个类型。模板类的目的不是允许用户随意分配任何泛型类型,而是通过允许您将类型作为参数传递来简化类的重复实现。例如:
List
List
相比,简化了创建
IntList
类和
CharList
类的过程


如果希望在同一数组中存储任何动态分配的类型,那么这就不那么容易了。我建议查看c++17
std::any
std::variant
类型,或者如果是较旧版本的语言,请从boost库中选择boost
boost::any
boost::variant
类型。其他不使用标准库的方法是使用多态性或
void*

欢迎使用SO。你谷歌过了吗?太棒了,谢谢!我以前没有做过任何C++模板编程,现在我了解C++模板编程的内容,以及编译语言和解释语言的区别。下面是在c中创建通用链表的步骤