【问题标题】:Std bind equivalent to lambda for binding a member function to a std functionStd bind 等效于 lambda,用于将成员函数绑定到 std 函数
【发布时间】:2018-02-23 10:43:13
【问题描述】:

我可以使用 lambda 绑定私有成员函数。我正在努力使用std::bind 编写等效的内容。这是我的尝试,但无法编译。

#include <functional>

class A { 
    private: 
        double foo(double x, double y); 
    public:          
        A(); 
        std::function<double(double,double)> std_function;      
 }; 

A::A() {
    // This works:
    //std_function = [this](double x, double y){return foo(x,y);};

    std_function = std::bind(&A::foo,this,std::placeholders::_1));
} 

【问题讨论】:

    标签: c++ c++11 stdbind


    【解决方案1】:

    std_function 应该采用 2 个参数,但您只指定了一个。请注意,placeholders 用于稍后调用 std_function 时要绑定的参数。

    改成

    std_function = std::bind(&A::foo, this, std::placeholders::_1, std::placeholders::_2);
    

    【讨论】:

    • 啊,我错了,我以为占位符是为了将它绑定到第一个参数。好,很好!非常感谢!
    • 我在这么简单的错误上花费了这么多时间。
    • @WooWapDaBug 能帮你搞清楚占位符的用法也不错。
    • 注意使用 lambdas 几乎总是更好的选择
    • @PasserBy 我想同样的方式,我实际上是在向某人解释这一点,我想向这个人展示它在 bind 中看起来有多丑,但我无法让它与 bind 一起工作,因为我总是使用 lambda。这是为了一个例子
    猜你喜欢
    • 2015-07-14
    • 2012-08-22
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 2014-01-09
    • 2020-11-07
    相关资源
    最近更新 更多