加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

传递成员函数作为参数/ c

发布时间:2020-12-16 07:25:29 所属栏目:百科 来源:网络整理
导读:我想在c中实现一个类b,它可以通过封装迭代器类型的成员集进行某种迭代.喜欢: b_object.for_each_x_do(function_f); 所以function_f将获得x成员的每个人并做任何事情.让我们说: void function_f(x_member_type x){ cout x endl; } 好.所以我试图通过以下代
我想在c中实现一个类b,它可以通过封装迭代器类型的成员集进行某种迭代.喜欢:

b_object.for_each_x_do(function_f);

所以function_f将获得x成员的每个人并做任何事情.让我们说:

void function_f(x_member_type x){ cout << x << endl; }

好.所以我试图通过以下代码实现这一目标:

class b{
    int *x;
public:
    void foreach_x_do(void (*f)(int)){
            while(*x++)  // or any kind of iteration through x
                    f(*x);
    }
};

class a{
    b b_inst;
public:
    void f(int x) {  }     
    a(){
            b_inst.foreach_x_do(f); // by mistake it was b_inst.foreach_x_do(f)(),however this wasn't the point at all. 
    }
    ~a(){}
};

int main(){}

但是,我收到此错误,编译时:

fp.cpp: In constructor ‘a::a()’:
fp.cpp:17: error: no matching function for call to ‘b::foreach_x_do(<unresolved overloaded function type>)’
fp.cpp:6: note: candidates are: void b::foreach_x_do(void (*)(int))

任何人都可以帮助它编译?

解决方法

它应该只是:

b_inst.foreach_x_do(f);

您还需要使用f static,而不是非静态成员方法,因为foreach_x_do函数的原始签名是针对独立函数指针,而不是指向成员函数的指针.那么,即

static void f(int x) {  }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读