c++ - 总的通用指针类型是什么?
问题描述
我需要一个地方可以互换地保存对象和函数指针。是否使用联合void *
和void (*)(void)
便携式解决方案?
union GenericPtr {
void *obj_ptr;
void (*fun_ptr)(void);
};
extern int *x, fn(void);
union GenericPtr ptr1, ptr2;
ptr1.obj_ptr = (void *) x;
ptr2.fun_ptr = (void (*)(void)) fn;
解决方案
是否使用联合
void *
和void (*)(void)
便携式解决方案?
它适用于指向对象或不是非静态成员函数的函数。请注意,您可能希望使用std::variant
此联合来节省大量样板代码。
这确实遗漏了指向成员的指针,这些指针并不是严格意义上的“指针”,但通常仍被称为“指针”。由于这些的不同类型与类一样多,因此不能使用联合来指向所有这些。
一个足以指向成员的通用指针也可以通过额外的间接来实现:void*
指向包含任何类型指针的内存块的指针是必要的。在标准库中有一个类型:(std::any
不限于持有任何指针,而是任何类型的对象,包括任何指针)。
推荐阅读
- html - 我的 django 模板导航栏无法正常工作
- javascript - I need to change the first sentence only bold from paragraph using javascript and css
- javascript - Vue JS 组件如何在 Twig x-template 文件中工作
- node.js - Firestore 更新文档字段并获得即时响应问题获取旧数据
- c# - 使用参考令牌的 ASPNETCore SignalR 身份验证
- javascript - 错误类型错误:角度 5 中的“_co.navigate 不是函数”
- android-studio - android studio:https自签名证书不受信任
- sql - 引发异常以禁止更新 PostgreSQL 中的列
- performance - Jmeter多用户执行
- java - 超时后重新发送消息