如何将stl队列推送函数绑定到std::函数?

问题描述 投票:0回答:2

我试了一下

{
    std::function<void(int)> push;
    queue<int> myqueue; 
    push = std::bind(static_cast<void (queue<int>::*)(int)>(&queue<int>::push), &myqueue,std::placeholders::_1);
    push(8);
}

但这是行不通的

c++ queue bind std-function
2个回答
4
投票

对于 queue<int>, push的参数类型应该是 const int&int&&所以你应该改变 static_cast 来匹配类型。

例如,从

static_cast<void (queue<int>::*)(int)>(&queue<int>::push)

static_cast<void (queue<int>::*)(const int&)>(&queue<int>::push)

生活


5
投票

更简单的方法是使用一个lambda函数

{
    queue<int> myqueue;
    auto push = [&myqueue](int param) { myqueue.push(param); }; 
    push(8); // myqueue - should be still reachable as it's captured by reference into a lambda capture lust 
}
© www.soinside.com 2019 - 2024. All rights reserved.