C++ 调用作为成员函数指针的数组元素
我有一个指向类A中成员函数的指针数组,需要访问类B中的元素。我的问题是,在尝试访问数组元素时,总是返回1,或者类型之间不匹配 到目前为止,我得到的是:C++ 调用作为成员函数指针的数组元素,c++,member-function-pointers,C++,Member Function Pointers,我有一个指向类A中成员函数的指针数组,需要访问类B中的元素。我的问题是,在尝试访问数组元素时,总是返回1,或者类型之间不匹配 到目前为止,我得到的是: void B::test(int value) { typedef void (a::*fn)(); fn funcPtr = &a::func1; (a.*funcPtr)(); } A.h: B.h B.cpp 这里的问题是,如果我这样使用a.aFuncs[value],它总是返回1 到目前为止,唯一对我
void B::test(int value) {
typedef void (a::*fn)();
fn funcPtr = &a::func1;
(a.*funcPtr)();
}
A.h:
B.h
B.cpp
这里的问题是,如果我这样使用a.aFuncs[value],它总是返回1
到目前为止,唯一对我有效的是:
void B::test(int value) {
typedef void (a::*fn)();
fn funcPtr = &a::func1;
(a.*funcPtr)();
}
但是这个解决方案并没有使用数组,所以现在没有真正的帮助。有人能帮我解决这个问题吗?有什么我不理解的基础吗?(a.*aFuncs[value])()
如果aFuncs
是全局的,那么它就可以工作。在您的示例中,您应该能够执行(a.*a.aFuncs[value])()
(a.*aFuncs[value])()
在aFuncs
是全局的情况下工作。在您的示例中,您应该能够执行(a.*a.aFuncs[value])()
您需要使用
a
两次才能调用该函数。一次访问向量,然后再次调用函数。那怪物看起来像
void B::test(int value) {
(a.*a.aFuncs[value])();
}
为了使它更简洁,您可以将函数指针复制到变量中,然后使用该函数指针调用函数。那看起来像
void B::test(int value) {
auto func = a.aFuncs[value];
(a.*func)();
}
您可以看到它在这种情况下工作。您需要使用
a
两次才能调用该函数。一次访问向量,然后再次调用函数。那怪物看起来像
void B::test(int value) {
(a.*a.aFuncs[value])();
}
为了使它更简洁,您可以将函数指针复制到变量中,然后使用该函数指针调用函数。那看起来像
void B::test(int value) {
auto func = a.aFuncs[value];
(a.*func)();
}
您可以看到它在这种情况下工作。如果您的编译器支持std::function,您还可以使用另一种方法:
std::array<std::function<void(Foo&)>, 3> a = {
&Foo::one,
&Foo::two,
&Foo::three
};
如果编译器支持std::function,还可以使用另一种方法:
std::array<std::function<void(Foo&)>, 3> a = {
&Foo::one,
&Foo::two,
&Foo::three
};
非常感谢,这很有魅力,也感谢你的解释,因为一个指向成员函数的新手指针确实是一个很难让你思考的话题:非常感谢,这很有魅力,也感谢你的解释,作为一个新手,指向成员函数的指针确实是一个很难让你理解的话题:Pthanks:)它也起了作用,也让我对这个话题有了很好的了解。hanks:)它起了作用,也让我对这个话题有了很好的了解
void B::test(int value) {
auto func = a.aFuncs[value];
(a.*func)();
}
std::array<std::function<void(Foo&)>, 3> a = {
&Foo::one,
&Foo::two,
&Foo::three
};
foo.a[0](foo);