首页 > 解决方案 > 总的通用指针类型是什么?

问题描述

我需要一个地方可以互换地保存对象和函数指针。是否使用联合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;

标签: c++c

解决方案


是否使用联合void *void (*)(void)便携式解决方案?

它适用于指向对象或不是非静态成员函数的函数。请注意,您可能希望使用std::variant此联合来节省大量样板代码。


这确实遗漏了指向成员的指针,这些指针并不是严格意义上的“指针”,但通常仍被称为“指针”。由于这些的不同类型与类一样多,因此不能使用联合来指向所有这些。

一个足以指向成员的通用指针也可以通过额外的间接来实现:void*指向包含任何类型指针的内存块的指针是必要的。在标准库中有一个类型:(std::any不限于持有任何指针,而是任何类型的对象,包括任何指针)。


推荐阅读