我只是不使用std :: bind就无法找到调用类方法的方法,因为我需要在tryfoo中使用参数调用此方法。
//simple function
uint16_t getreg(const uint8_t& num)
{
return 0;
}
让我们假设在ClassItem类中我们有公共方法
uint16_t ClassItem::getregI(const uint8_t &f)
{
return 1;
}
具有可调用功能的功能
void tryfoo (const uint8_t ¶m, std::function<uint16_t (const uint8_t&)> f)
{
// let's suppose that param= got some other value here
uint16_t result = f(param);
}
void basefunction(ClassItem &A)
{
tryfoo (0, getreg); // Why it's OK
tryfoo (0, A.getregI) // And this's NOT ?
}
std::function
保留一个指针*的空间,而没有别的。仅传递一个普通函数是可能的,因为它适合一个指针的空间。对于对象中的成员函数,这是不可能的,因为您必须同时存储指向该函数的指针和指向该对象的指针,并且您不能将两个指针放入一个指针的空间中(至少,不安全)。因此,您必须使用std::bind
构建一个单独的对象并将其传递给该指针。您可以仅将指针传递给成员函数,而无需像tryfoo (0, ClassItem::getregI);
那样绑定到一个对象,但这将无法访问到A
对象。