总通用指针类型是什么?

时间:2019-04-18 10:11:36

标签: c++ 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;

1 个答案:

答案 0 :(得分:2)

  

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

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


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

也可以通过附加的间接访问来实现足够通用的指向成员的指针:指向存储器块的void*指针,其中包含必需的任何类型的指针。标准库中有一种类型:std::any(不限于保存任何指针,实际上是任何类型的对象,包括任何指针)。