C++:指向不同函数的成员函数指针数组

标签 c++ pointers function

我有一个包含成员函数 foo() 和 bar() 的类 A,它们都返回一个指向类 B 的指针。如何将包含函数 foo 和 bar 的数组声明为类 A 中的成员变量?以及如何通过数组调用函数?

最佳答案

成员函数指针语法为ReturnType (Class::*)(ParameterTypes...),例如:

typedef B* (A::*MemFuncPtr)(); // readability
MemFuncPtr mfs[] = { &A::foo, &A::bar }; // declaring and initializing the array
B* bptr1 = (pointerToA->*mfs[0])(); // call A::foo() through pointer to A
B* bptr2 = (instanceOfA.*mfs[0])(); // call A::foo() through instance of A

参见例如this InformIT article有关指向成员的指针的更多详细信息。

您可能还想查看 Boost.BindBoost.Function (或它们的 TR1 等价物)允许您不透明地将成员函数指针绑定(bind)到一个实例:

typedef boost::function<B* ()> BoundMemFunc;
A instanceOfA;
BoundMemFunc mfs[] = { 
    boost::bind(&A::foo, &instanceOfA), 
    boost::bind(&A::bar, &instanceOfA) 
};
B* bptr = mfs[0](); // call A::foo() on instanceOfA

要使用这样的数组作为成员,请注意您不能使用成员初始化列表来初始化数组。因此,您可以在构造函数主体中分配给它:

A::A {
    mfs[0] = &A::foo;
}

... 或者您使用可以在那里实际初始化的类型,例如 std::vectorboost::array:

struct A {
    const std::vector<MemFuncPtr> mfs;
    // ...
};

namespace {
    std::vector<MemFuncPtr> init_mfs() {
        std::vector<MemFuncPtr> mfs;
        mfs.push_back(&A::foo);
        mfs.push_back(&A::bar);
        return mfs;
    }
}

A::A() : mfs(init_mfs()) {}

关于C++:指向不同函数的成员函数指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3565825/

相关文章:

c++ - std::bad_alloc 使用 Botan 进行 PKCS#11

malloc 之后调用 free() 会导致意外行为

excel - Excel 2010 中的 VBA : Scripting. 函数的字典返回值不会作为参数传递给包装函数调用

有条件地返回不同类型的 C++ 函数

c++ - 调用 wcstombs 时 Valgrind 报告未初始化的值

c++ - 静态变量 undefined reference

c - 直接使用数组指针和数组地址不一致

jquery - polymer ! Ajax中调用函数成功

c++ - 同一变量的测试打印似乎给出了不同的结果

c++ - 具有包含另一个类的函数指针的映射的类