如何从函数传递参数到std :: bind

问题描述 投票:-2回答:1

我正在研究c ++ 11。

我想在一个类中编写一个函数funA,它在同一个类中绑定另一个函数funB。而funB函数是函数funA中的一个参数。什么是funcA的语​​法?我尝试使用std :: function func,但我无法编译。请解释。

谢谢。

class ServiceClass
{
typedef std::function<void(const int&, const int&)> ServiceCallBack;

public:
void ServiceFunc(ServiceCallBack callback)
{
    callback(1,2);
}
};

class MyClass
{
public:

ServiceClass serviceClass;

void myFunction(int i)
{
    cout << __FUNCTION__ << endl;
    cout << i << endl;
}

void myFunction2(int i)
{
    cout << __FUNCTION__ << endl << i << endl;
}

void bindFunction(std::function<void()> func)
{
    std::bind(func, this, std::placeholders::_1);
    func();
}

void testmyFunction()
{
    serviceClass.ServiceFunc( std::bind(
                                  MyClass::myFunction,
                                  this,
                                  std::placeholders::_1
                                  ));
}

void testmyFunction2()
{
    serviceClass.ServiceFunc( std::bind(
                                  MyClass::myFunction2,
                                  this,
                                  std::placeholders::_1
                                  ));
}

void testFunctions( int i )
{
    if( i == 1 )
    {
        serviceClass.ServiceFunc( std::bind( MyClass::myFunction, this, std::placeholders::_1 ));
    }
    else if( i == 2 )
    {
        serviceClass.ServiceFunc( std::bind( MyClass::myFunction2, this, std::placeholders::_1 ));
    }
}
};

基于某些条件,在函数testFunctions中,我想调用任何回调函数myFunction或myFunction2。因此,如果a可以修改testFunctions以接收可以接受任何回调函数的参数,那么我就不必编写if else条件。

请建议。

c++ c++11 std-function stdbind
1个回答
0
投票
typedef void(MyClass::*MY_CLASS_PTR)(int);
// function which takes function pointer as parameter
void testFunctions( MY_CLASS_PTR fptr)
{
// fptr should have which function to bind 
  serviceClass.ServiceFunc( std::bind( fptr , this, std::placeholders::_1 ));
}
© www.soinside.com 2019 - 2024. All rights reserved.