对链表c++中的未知返回类型使用void指针
Using void pointers for unknown return types in a linked list c++
我正在尝试实现一个链表,每个节点持有的值不必总是相同的类型。我使用了一个void指针来存储值,但问题是从节点中检索值。我想编写一个包含switch语句的函数,将值强制转换为适当的类型,但除了使用另一个void指针之外,我不知道如何处理未知的返回类型。
有没有办法解决这个问题,或者有没有更有效的方法来处理未知的数据类型?
- 除非你100%确定自己在做什么,否则你不会使用
void*
value
不使用T*
指针- 您根本不使用原始指针,而是使用c++标准库的动态内存管理工具中的适当习惯用法
- 您使用标准的链表实现:
std::list
"有没有办法解决这个问题,或者可能有更有效的方法来处理未知数据类型?">
是的,有提到的boost::any
或boost::variant
,尽管它们不是c++标准类型。
如果存储的指针都指向您创建的类,您能创建一个公共基类吗?然后,您只需要一个指向基类类型的指针链接列表。
当您需要从基类指针中检索派生指针时,您可以尝试一系列if (dynamic_cast<DerivedClass>(ptr) != nullptr)
测试,直到其中一个通过——然后您就知道您找到了正确的类型。
即使函数在另一个模块而不是客户端函数中,也可以执行此操作。我在这里回答了一个类似的问题。但void指针的一个可能问题是,您必须跟踪所有类型,如您所说,使用switch语句验证其中的每一个类型。我已经分享了大量的代码来完成这项工作。希望你喜欢!
相关文章:
- 如何在 C++ 中将 void 函数传递给 void 指针
- 将通用引用强制转换为可调用的 void 指针,反之亦然
- C++为 void 指针分配一个字符串
- 为什么在将 void 指针转换为整数指针时出现分段错误
- 取消引用 void 指针以将值分配给结构
- C 与 C++,处理 void** 指针
- 除了调用全局删除运算符之外,删除一个void指针还能做什么呢
- 用非零值初始化void指针的正确(或最安全)方法
- 将 void 指针分配给另一个 void 指针
- c ++ 我是否需要手动删除指向另一个具体类型的 void* 指针?
- 如何将 std::string 作为构造函数参数传递,并将其保存的 C 字符串存储在 void 指针中?
- 如何将 std::string 赋回作为 <char>void* 指针传递的 std::vector.data()?
- 将指针传递到结构,与传递 void 指针并强制转换为结构
- 如何在void*指针下检查运行时类型(允许简单类型,没有基类)?
- 用于初始化结构的 void 指针强制转换
- 使用 void 指针:void **ptr.. 如何修改共享内存的值?
- 访问由 void 指针引用的结构的成员
- 你不能在 void 指针上使用指针算法,那么 void 指针数组是如何工作的呢?
- 如何警告 C 中 void 指针上的参数不兼容的类型
- 指向类模板方法的 void 指针的向量