我正在尝试初始化一个std ::数组函数指针。这些指针指向已实例化对象的成员函数。
有人可以帮助以下示例吗?很多……
指向自由函数的指针的处理方式与指向成员函数的指针不同。该 TVoidVoid type是指向自由函数的指针,但是你需要一个指向a的指针 Foo 会员功能。因此,定义 Foo 第一,
TVoidVoid
Foo
class Foo { /* As before... */ };
然后 使用成员函数的类型别名( Foo 必须知道此时)
// Note the different syntax to the former TVoidVoid using FooVoidVoid = void (Foo::*)();
下一个, Bar 必须进行调整,使其数据成员属于类型 FooVoidVoid 并且构造函数接受此类型作为参数(其余部分 Bar 可以保持原样),最后将数组定义为
Bar
FooVoidVoid
std::array<Bar, 3> bar_array = {{Bar{}, Bar{&Foo::myHandler}}};
注意 &Foo::myHandler 与任何现有的无关 Foo 实例。它只是指向a的指针 Foo 成员函数,只有当你调用它时,才必须将它与a一起使用 Foo 对象(特殊运营商 .* 和 ->* 意味着要发生或使用 std::invoke 一旦升级到支持C ++ 17的编译器)。
&Foo::myHandler
.*
->*
std::invoke