#include <iostream>
#include <functional>
class world
{
public:
void hello(){
std::cout << "wow" << std::endl;
}
};
int main(void)
{
std::function<world&,void()> pFn = &world::hello; //is this right???
};我试过这个,但它不起作用:(如何处理它?请解释一下我冷静的方式
发布于 2020-08-27 11:34:50
首先,std::function是:
template<类>类函数;/*未定义*/ template<类R,类Args >类function;
你的std::function<world&,void()>说不通。您应该选择要存储在函数对象中的函数类型。
接下来,您需要一个world来调用它的一个非静态成员函数。
你能做的是:
#include <iostream>
#include <functional>
class world
{
public:
void hello(){
std::cout << "wow" << std::endl;
}
};
int main(void)
{
//std::function<world&,void()> pFn = &world::hello; //is this right???
world w;
std::function<void()> pFn = [&w](){ w.hello();};
pFn();
}当您调用w时,您需要确保pFn()仍然活着。或者,您可以让pFn以一个world作为参数,在这两种情况下,您都需要一个实例来调用一个非静态成员函数。
PS:请注意,在上面的示例中,当您可以使用lambda本身时,使用std::function实际上是没有意义的。std::function是为了一个你通常不需要付出的代价。
https://stackoverflow.com/questions/63614988
复制相似问题