std :: function和shared_ptr

 剧情归一_905 发布于 2023-02-10 11:01

我一直在使用Loki的Functor,我最近问了一个关于它的问题(仍然没有答案......)我被告知要使用std :: function,但我更喜欢Loki的Functor实现,因为它也适用于各种各样的指针作为参数(例如std :: shared_ptr).

struct Toto
{
    void foo( int param )
    {
        std::cout << "foo: " << param << std::endl;
    }
};

int
main( int argc, const char** argv )
{
    std::shared_ptr ptr = std::make_shared();

    Loki::Functor func( ptr, &Toto::foo );

    func(1);
}

有没有办法用std :: function做到这一点?

1 个回答
  • 使用std::bind.

    auto func = std::bind(&Toto::foo, ptr, std::placeholders::_1);
    

    在这里,func将推断出类型,从中返回std::bind或如果你不喜欢auto你可以使用(并且你想使用std::function)

    std::function<void(int)> func = std::bind(&Toto::foo, 
    ptr, std::placeholders::_1);
    

    这里std::function将根据结果构建std::bind. ptr将被复制到从中返回的某个对象std::bind,但是如果您不想要复制,则可以使用std::ref/ std::cref.

    2023-02-10 11:04 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有