首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解释一下std::类成员方法的函数处理

解释一下std::类成员方法的函数处理
EN

Stack Overflow用户
提问于 2020-08-27 11:25:35
回答 1查看 528关注 0票数 1
代码语言:javascript
复制
#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???
};

我试过这个,但它不起作用:(如何处理它?请解释一下我冷静的方式

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-27 11:34:50

首先,std::function是:

template<类>类函数;/*未定义*/ template<类R,类Args >类function;

你的std::function<world&,void()>说不通。您应该选择要存储在函数对象中的函数类型。

接下来,您需要一个world来调用它的一个非静态成员函数。

你能做的是:

代码语言:javascript
复制
#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是为了一个你通常不需要付出的代价。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63614988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档