发送方法作为参数

Send method as parameter

我只是找不到不使用 std::bind 调用 class 方法的方法,因为我需要在 tryfoo 中调用带有参数的方法。

//simple function  
uint16_t getreg(const uint8_t& num)  
{  
    return 0;  
}  

假设在 class ClassItem 中我们有 public 方法

uint16_t ClassItem::getregI(const uint8_t &f)  
{  
    return 1;  
}  

具有可调用函数的函数

void tryfoo (const uint8_t &param, 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 持有 space 一个指针*,仅此而已。只传递一个普通函数是可能的,因为它适合一个指针的 space 。这对于来自对象的成员函数是不可能的,因为您必须同时存储指向函数的指针和指向对象的指针,而且您不能将两个指针放入一个指针的 space (至少,不安全)。

所以你必须用 std::bind 构建一个单独的对象并将指针传递给它。你可以只将指针传递给成员函数而不绑定到像这样的对象 tryfoo (0, ClassItem::getregI);,但那将无法访问 A 对象。

*: 细节有点模糊,但总的来说还是可以的