我正在尝试实现链接列表,每个节点保存的值不必总是相同的类型。我使用了一个void指针来存储值,但我遇到的问题是从节点中检索值。我想编写一个包含switch语句的函数来将值转换为适当的类型,但我不知道如何处理未知的返回类型而不是使用另一个void指针。
有没有解决方法,或者更有效的方法来处理未知数据类型?
答案 0 :(得分:1)
void*
,除非您100%确定自己在做什么。T*
value
指针
std::list
。"有没有解决方法,或者更有效的方法来处理未知数据类型?"
是的,如上所述boost::any
或boost::variant
,尽管这些不是c ++标准类型。
答案 1 :(得分:0)
如果您存储的指针都是您创建的类,那么您可以创建一个公共基类吗?然后你只需要一个指向基类类型的链接列表。
当你需要从基类指针中检索派生指针时,你可以尝试一系列if (dynamic_cast<DerivedClass>(ptr) != nullptr)
测试,直到其中一个经过 - 然后你就知道你已经找到了正确的类型。
答案 2 :(得分:0)
即使该函数位于另一个模块而不是客户端函数内,您也可以这样做。我已经回答了类似的问题here。但是,void指针的一个可能的问题是你必须跟踪所有类型,用你所说的用switch语句验证它们中的每一个。我已经分享了一大堆代码可以完成工作。希望你喜欢!