C++ 调用作为成员函数指针的数组元素

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 到目前为止,唯一对我

我有一个指向类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.*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);