发送方法作为参数
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 ¶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
持有 space 一个指针*,仅此而已。只传递一个普通函数是可能的,因为它适合一个指针的 space 。这对于来自对象的成员函数是不可能的,因为您必须同时存储指向函数的指针和指向对象的指针,而且您不能将两个指针放入一个指针的 space (至少,不安全)。
所以你必须用 std::bind
构建一个单独的对象并将指针传递给它。你可以只将指针传递给成员函数而不绑定到像这样的对象 tryfoo (0, ClassItem::getregI);
,但那将无法访问 A
对象。
*: 细节有点模糊,但总的来说还是可以的
我只是找不到不使用 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 ¶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
持有 space 一个指针*,仅此而已。只传递一个普通函数是可能的,因为它适合一个指针的 space 。这对于来自对象的成员函数是不可能的,因为您必须同时存储指向函数的指针和指向对象的指针,而且您不能将两个指针放入一个指针的 space (至少,不安全)。
所以你必须用 std::bind
构建一个单独的对象并将指针传递给它。你可以只将指针传递给成员函数而不绑定到像这样的对象 tryfoo (0, ClassItem::getregI);
,但那将无法访问 A
对象。
*: 细节有点模糊,但总的来说还是可以的