c++bind某个函数和直接调用某个函数有什么区别

  1. 简单来说就是为什么不直接调用某个函数而需要通过bind调用
阅读 3.8k
2 个回答

在某些算法中只接受一元或二元的函数,这时候直接使用std::bind就会很方便,而不是在声明一个新的函数

std::string f(const int &num, const std::string &str)
{
    return str + std::to_string(num);
}

int main()
{
    std::vector<std::string> str1{ "lz", "lzkila", "ok" };
    std::vector<std::string> str2{ "no", "ik" };

    std::transform(str1.begin(), str1.end(), std::back_inserter(str2), std::bind(f, 3, std::placeholders::_1));
}

还可以实现多态

    auto funcAddAction = [this](QWidget *pt, const QString &text, std::function<void()> method)
    {
        auto a = new QAction(pt);
        a->setText(text);
        pt->addAction(a);
        connect(a, &QAction::triggered, this, method);
    };

    auto pPbMenu = new QMenu(ui.pushButton);
    ui.pushButton->setMenu(pPbMenu);
    funcAddAction(pPbMenu, "button1", std::bind(&QtUiDemo::slotShowHello, this));
    funcAddAction(pPbMenu, "button2", std::bind(&QtUiDemo::slotShowWorld, this));
    funcAddAction(pPbMenu, "button3", std::bind(&QtUiDemo::slotShowOk, this));

std::bind 可以从已经定义声明的函数 通过固定参数定义出新的函数.

 #include <iostream>
 #include <functional>
 
 using namespace std;
 
 void f(int x, int y) {
     std::cout<<x<<" "<<y<<std::endl;
 }
 
 int main()
 {
     using namespace std::placeholders;
     auto f1 = std::bind(f, _1, 42);
     f1(1);
 }
推荐问题