Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否可以在数组中保存具有不同参数的成员函数?_C++_Arrays_Function_Oop - Fatal编程技术网

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

C++ 是否可以在数组中保存具有不同参数的成员函数?,c++,arrays,function,oop,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")} 只要可调用对象具有相同的签名,就可以在std::function中存储不同的可调用对象,例如: stru

如果我有

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")}

只要可调用对象具有相同的签名,就可以在
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);
}
结构A{ void f1(); 空f2(int); void f3(const std::string&); }; int main(){ std::函数[]={ &A::f1 ,[](A&A){A.f2(2);} ,[](A&A){A.f3(“abc”);} ,std::bind(&A::f3,std::占位符::_1,“abc”) }; A A; 用于(自动和自动:功能) f(a); }
请注意,我在这里使用lambda表达式而不是
std::bind
,因为lambda是最佳实践:更易于编写、读取和更高效。

只要可调用对象具有相同的签名,就可以在
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);
}
结构A{ void f1(); 空f2(int); void f3(const std::string&); }; int main(){ std::函数[]={ &A::f1 ,[](A&A){A.f2(2);} ,[](A&A){A.f3(“abc”);} ,std::bind(&A::f3,std::占位符::_1,“abc”) }; A A; 用于(自动和自动:功能) f(a); }
请注意,我在这里使用lambda表达式而不是
std::bind
,因为lambda是最佳实践:更易于编写、读取和更高效。

要存储在数组中的表达式没有不同的参数。顺便说一句,是的,这是可能的,为什么不呢,但是您缺少了this指针的占位符
std::function
出现在我的脑海中…其中的一些;)@StoryTeller@MikeMB:两者都可以接受。要存储在数组中的参数没有不同。顺便说一句,是的,这是可能的,为什么不呢,但是您缺少了this指针的占位符
std::function
出现在我的脑海中…其中的一些;)@StoryTeller@MikeMB:两者都可以接受。OP的问题似乎与成员有关functions@Gruffalo此解决方案适用于成员函数。@JosephThomson现在是:)似乎OP的问题与成员有关functions@Gruffalo此解决方案适用于成员函数。@JosephThomson现在是:)