通过 class 成员方法向我解释 std::function 处理
Explain me about std::function handling by class member method
#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???
};
我试过了,但没用:(
如何处理?
请给我解释一下很酷的方法
首先,std::function
是:
template< class >
class function; /* undefined */
template< class R, class... Args >
class function<R(Args...)>;
你的std::function<world&,void()>
没有意义。您应该选择要存储在函数对象中的函数类型。
接下来,您需要一个 world
来调用其 non-static 成员函数之一。
您可以做的是:
#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();
}
调用pFn()
时需要确保w
还活着。或者你可以让 pFn
接受一个 world
作为参数,在任何一种情况下你都需要一个实例来调用 non-static 成员函数。
PS:请注意,在上面的示例中,当您可以使用 lambda 本身时,使用 std::function
确实没有意义。 std::function
的价格通常是您不需要支付的。
#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???
};
我试过了,但没用:( 如何处理? 请给我解释一下很酷的方法
首先,std::function
是:
template< class > class function; /* undefined */ template< class R, class... Args > class function<R(Args...)>;
你的std::function<world&,void()>
没有意义。您应该选择要存储在函数对象中的函数类型。
接下来,您需要一个 world
来调用其 non-static 成员函数之一。
您可以做的是:
#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();
}
调用pFn()
时需要确保w
还活着。或者你可以让 pFn
接受一个 world
作为参数,在任何一种情况下你都需要一个实例来调用 non-static 成员函数。
PS:请注意,在上面的示例中,当您可以使用 lambda 本身时,使用 std::function
确实没有意义。 std::function
的价格通常是您不需要支付的。