【问题标题】:Is it possible to hold member functions with different arguments in an array?是否可以在数组中保存具有不同参数的成员函数?
【发布时间】:2018-03-09 22:21:42
【问题描述】:

假设我有

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

【问题讨论】:

  • 您要存储在数组中的那些没有不同的参数。顺便说一句,是的,这是可能的
  • 当然,为什么不呢,但是您缺少 this 指针的占位符
  • std::function 浮现在脑海中......
  • 其中的一小部分 ;) @StoryTeller
  • @MikeMB:两者都应该可以接受。

标签: c++ arrays function oop


【解决方案1】:

只要可调用对象具有相同的签名,就可以在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,因为 lambda 是最佳实践:更容易编写、阅读和更高效。

【讨论】:

  • 似乎 OP 的问题与 member 函数有关
  • @Gruffalo 这个解决方案针对成员函数的。
  • @JosephThomson 现在是 :)
猜你喜欢
  • 1970-01-01
  • 2018-06-23
  • 2017-02-23
  • 1970-01-01
  • 2020-06-23
  • 2017-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多