在<functional>中有什么功能组合吗?

Arm*_*yan 5 c++ stl bind predicate

我想做的事情很容易用C++ 0x lambdas完成.我只是想弄清楚如何与做bind1stbind2nd只.

我需要找到i向量中的第一个元素v,例如(i-1)/p1 == p2p1和p2是预定义的整数.

find_if(v.begin(), v.end(), ???)
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何用minus<int> divides<int> equal_to<int>和形成谓词bind2nd.好像我需要一些功能组合

equal(div(minus(i, 1), p1), p2)
Run Code Online (Sandbox Code Playgroud)

可能吗?

请不要建议诸如编写独立的一元函数或结构的变通方法operator().我真的很感兴趣的函数的函数bind1stbind2nd.这不是真正的代码,只是兴趣.谢谢 :)

Col*_*nee 4

不幸的是,仅使用当前的库无法实现您想要做的事情functional。您需要创建自己的类或函数来进行组合。

Boost 曾经提供了一个 Compose 库,用于组合这样的函数,但我认为在引入 Bind 和 Lambda 时它被删除了。

为了完整起见,可以bind使用以下内容来完成:

std::bind(std::equal_to<int>(), /* ... == P2 */
    std::bind(std::divides<int>(), /* ... / P1 == P2 */
        std::bind(std::minus<int>(), _1, 1), /* (x - 1) / P1 == P2 */
    p1), 
p2);
Run Code Online (Sandbox Code Playgroud)