是否有一个C++等同于python的functools.partial

use*_*453 1 c++ python functional-programming

我非常喜欢functools.partialpython中的函数以及这个函数的概念.作为示例考虑以下python脚本(我知道这个案例不是一个非常有用的示例,使用functools.partial,它应该只是一个简单的例子.)

import functools

def func(a, b, c):
    sum = a + b + c
    return sum


if __name__ == "__main__":
    func_p = functools.partial(func, a=1, c=1)
    sum = func_p(b=1)
    print(sum)
Run Code Online (Sandbox Code Playgroud)

C++中有没有提供类似功能的东西?

Ami*_*ory 6

是的,lambda函数:

auto func_p = [](int b){return func(1, b, 1);};

func_p(1);
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我个人也喜欢Python中的lambdas.考虑以下:

lambda b: func(b**2, b, b - 3)
Run Code Online (Sandbox Code Playgroud)

这是无法做到的functools.为什么有两种不同的解决方案(一种仅适用于某些情况)?

应该有一个 - 最好只有一个 - 明显的方法来做到这一点.


Lin*_*gxi 5

C++ 中的类似工具可能是std::bind. 请参阅以下代码进行说明:

#include <functional>
#include <iostream>

int func(int a, int b, int c) {
  return a + b + c;
}

int main() {
  auto func_p = std::bind(func, 1, std::placeholders::_1, 1);
  std::cout << func_p(1) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)