是否可以在数组中保存具有不同参数的成员函数?

时间:2017-09-28 08:38:43

标签: c++ arrays function oop

假设我有

void a::f1()
void a::f2(int)
void a::f3(const std::string&)

我是否可以使用数组来存储类似

的内容
ary1 = {&a::f1, bind(&a::f2, 2), bind(&a::f3, "abc"}
ary2 = {&a::f1, bind(&a::f3, "def")}

1 个答案:

答案 0 :(得分:3)

只要密码具有相同的签名,就可以在std::function中存储不同的可调用对象,例如:

struct A {
    void f1();
    void f2(int);
    void f3(const std::string&);
};

int main() {
    std::function<void(A&)> functions[] = {
          &A::f1
        , [](A& a) { a.f2(2); }
        , [](A& a) { a.f3("abc"); }
        , std::bind(&A::f3, std::placeholders::_1, "abc") 
    };

    A a;
    for(auto& f : functions)
        f(a);
}

请注意,我在这里使用lambda表达式而不是std::bind,因为lambdas是最佳实践:更容易编写,读取和更高效。