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

时间:2015-07-05 16:31:50

标签: c++ linked-list void-pointers

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

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

3 个答案:

答案 0 :(得分:1)

  1. 您不能使用void*,除非您100%确定自己在做什么。
  2. 您不能使用T*
  3. value指针
  4. 您根本不使用原始指针,而是使用c ++标准库的Dynamic memory management工具中的相应习惯用法。
  5. 您使用标准链接列表实施:std::list
  6.   

    "有没有解决方法,或者更有效的方法来处理未知数据类型?"

    是的,如上所述boost::anyboost::variant,尽管这些不是c ++标准类型。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

即使该函数位于另一个模块而不是客户端函数内,您也可以这样做。我已经回答了类似的问题here。但是,void指针的一个可能的问题是你必须跟踪所有类型,用你所说的用switch语句验证它们中的每一个。我已经分享了一大堆代码可以完成工作。希望你喜欢!