作为参数发送方法

问题描述 投票:0回答:1

我只是不使用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 &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  ?
}
c++ class methods std-function
1个回答
0
投票
这是因为std::function保留一个指针*的空间,而没有别的。仅传递一个普通函数是可能的,因为它适合一个指针的空间。对于对象中的成员函数,这是不可能的,因为您必须同时存储指向该函数的指针和指向该对象的指针,并且您不能将两个指针放入一个指针的空间中(至少,不安全)。

因此,您必须使用std::bind构建一个单独的对象并将其传递给该指针。您可以仅将指针传递给成员函数,而无需像tryfoo (0, ClassItem::getregI);那样绑定到一个对象,但这将无法访问到A对象。

© www.soinside.com 2019 - 2024. All rights reserved.