什么是 'R(*pf)(void*, Args..)',函数指向方法的指针?

What is `R(*pf)(void*, Args...)`, function pointer to a method?

本文关键字:方法 指针 Args 什么 pf void 函数      更新时间:2023-10-16

我在这里看到了这种类型。我相信他正在尝试为成员指针类型擦除创建一个变量pf(这就是为什么那里有void*的原因(。然后我在类似的此类类中注意到了这种类型签名。

但是根据 isocpp 的非静态成员指针类型定义如下:int (Fred::*)(char,float)(对于某些类Fred( 函数指针类型定义如下:int (*)(char,float)

因此,可以创建一个成员指针变量,mp如下所示:int (S::*mp)(int) = nullptr;

也许这个void*表示this*及其通过定义函数指针变量来定义成员指针变量的另一种方法?这可能吗?

什么是R(*pf)(void*, Args...)

它是函数指针的声明。仅此而已。

兼容函数取void*Args...,并返回R

在给定的示例中,分配给指针的兼容函数是 lambda。void*是一些可调用f的类型擦除地址,而Args...成员是将传递给该可调用对象的参数。通过捕获 lambda 中的类型别名来恢复可调用对象的类型(很好!

R(*pf)(void*, Args...)是一个函数指针(常规指针,而不是指向成员的指针(,指向返回R并具有(void*, Args...)参数的函数,其中Args...是类型列表(扩展的模板参数包(。

也许这个void*表示this*及其定义成员指针变量的另一种方法

不,C++中没有这样的功能。

如果你看一下代码,分配给这个指针的唯一东西是lambda,就像这样:

pf = [](void* ptr, Args... args)->R{
return blah;
};

我不确定你为什么希望指向成员的指针参与其中。