对链表c++中的未知返回类型使用void指针

Using void pointers for unknown return types in a linked list c++

本文关键字:void 指针 返回类型 未知 链表 c++      更新时间:2023-10-16

我正在尝试实现一个链表,每个节点持有的值不必总是相同的类型。我使用了一个void指针来存储值,但问题是从节点中检索值。我想编写一个包含switch语句的函数,将值强制转换为适当的类型,但除了使用另一个void指针之外,我不知道如何处理未知的返回类型。

有没有办法解决这个问题,或者有没有更有效的方法来处理未知的数据类型?

  1. 除非你100%确定自己在做什么,否则你不会使用void*
  2. value不使用T*指针
  3. 您根本不使用原始指针,而是使用c++标准库的动态内存管理工具中的适当习惯用法
  4. 您使用标准的链表实现:std::list

"有没有办法解决这个问题,或者可能有更有效的方法来处理未知数据类型?">

是的,有提到的boost::anyboost::variant,尽管它们不是c++标准类型。

如果存储的指针都指向您创建的类,您能创建一个公共基类吗?然后,您只需要一个指向基类类型的指针链接列表。

当您需要从基类指针中检索派生指针时,您可以尝试一系列if (dynamic_cast<DerivedClass>(ptr) != nullptr)测试,直到其中一个通过——然后您就知道您找到了正确的类型。

即使函数在另一个模块而不是客户端函数中,也可以执行此操作。我在这里回答了一个类似的问题。但void指针的一个可能问题是,您必须跟踪所有类型,如您所说,使用switch语句验证其中的每一个类型。我已经分享了大量的代码来完成这项工作。希望你喜欢!