我正在研究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条件。
请建议。
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 ));
}