我在这里看到了这种类型。我相信他正在尝试为成员指针类型擦除创建一个变量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;
};
我不确定你为什么希望指向成员的指针参与其中。