如何通过需要自由函数的成员函数?

如何通过需要自由函数的成员函数?

问题如下:考虑这段代码:

#include <iostream>class aClass{public:
    void aTest(int a, int b)
    {
        printf("%d + %d = %d", a, b, a + b);
    }};void function1(void (*function)(int, int)){
    function(1, 1);}void test(int a,int b){
    printf("%d - %d = %d", a , b , a - b);}int main (int argc, const char* argv[]){
    aClass a();

    function1(&test);
    function1(&aClass::aTest); // <-- How should I point to a's aClass::test function?

    return 0;}

我如何使用a's aClass::test作为参数function1?我坚持这样做。

我想访问该班级的成员。


千巷猫影
浏览 477回答 3
3回答

偶然的你

但您也可以在不将class实例作为function1C ++ 11中的显式参数传递的情况下执行此操作:#include&nbsp;<functional>using&nbsp;namespace&nbsp;std::placeholders;void&nbsp;function1(std::function<void(int,&nbsp;int)>&nbsp;fun){ &nbsp;&nbsp;&nbsp;&nbsp;fun(1,&nbsp;1);}int&nbsp;main&nbsp;(int&nbsp;argc,&nbsp;const&nbsp;char&nbsp;*&nbsp;argv[]){ &nbsp;&nbsp;&nbsp;... &nbsp;&nbsp;&nbsp;aClass&nbsp;a; &nbsp;&nbsp;&nbsp;auto&nbsp;fp&nbsp;=&nbsp;std::bind(&aClass::test,&nbsp;a,&nbsp;_1,&nbsp;_2); &nbsp;&nbsp;&nbsp;function1(fp); &nbsp;&nbsp;&nbsp;return&nbsp;0;}

一只萌萌小番薯

指向成员函数的指针与指向函数的指针不同。为了通过指针使用成员函数,您需要一个指向它的指针(显然)和一个要应用它的对象。所以适当的版本function1将是void&nbsp;function1(void&nbsp;(aClass::*function)(int,&nbsp;int),&nbsp;aClass&&nbsp;a)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;(a.*function)(1,&nbsp;1);}并称之为:aClass&nbsp;a;&nbsp;//&nbsp;note:&nbsp;no&nbsp;parentheses;&nbsp;with&nbsp;parentheses&nbsp;it's&nbsp;a&nbsp;function&nbsp;declarationfunction1(&aClass::test,&nbsp;a);
打开App,查看更多内容
随时随地看视频慕课网APP