C++ 在链表c+;中为未知返回类型使用空指针+;
我正在尝试实现一个链表,每个节点持有的值不一定总是相同的类型。我使用了一个空指针来存储该值,但我遇到的问题是从节点检索该值。我想编写一个包含switch语句的函数,将值强制转换为适当的类型,但除了使用另一个void指针之外,我不确定如何处理未知的返回类型 有没有办法解决这个问题,或者有没有更有效的方法来处理未知的数据类型C++ 在链表c+;中为未知返回类型使用空指针+;,c++,linked-list,void-pointers,C++,Linked List,Void Pointers,我正在尝试实现一个链表,每个节点持有的值不一定总是相同的类型。我使用了一个空指针来存储该值,但我遇到的问题是从节点检索该值。我想编写一个包含switch语句的函数,将值强制转换为适当的类型,但除了使用另一个void指针之外,我不确定如何处理未知的返回类型 有没有办法解决这个问题,或者有没有更有效的方法来处理未知的数据类型 除非100%确定自己在做什么,否则不要使用void* 对于值 你根本不使用原始指针,但是从C++标准库的设施中使用适当的习惯用法。 您使用标准的链表实现: “有没有办法解决这个
void*
值
<>是的,有< <代码> Boo::任何或
当您需要从基类指针检索派生指针时,您可以尝试一系列的
if(dynamic_cast(ptr)!=nullptr)
测试,直到其中一个测试通过——那么您就知道您找到了正确的类型。即使函数位于另一个模块而不是客户端函数中,您也可以这样做。我已经回答了一个类似的问题。但是void指针的一个可能问题是,您必须跟踪所有类型,并用switch语句验证它们中的每一个,正如您所说。我分享了大量这样做的代码。希望你喜欢 如果它可以是你提前知道的几种类型中的一种,那就试试工会。不要使用get()
函数,而是使用getInt()
、getString()
等,或者使用模板化的get()
。更好的是,如果您可以使用Boost,请尝试Boost::variant
或Boost::any
std::list
?我想补充一点,除非您知道自己真正需要的是链表(std::list),否则永远不要使用链表。默认情况下使用std::vector,除非您知道需要其他东西。