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

时间:2015-05-16 10:00:19

标签: python c++ functional-programming

我非常喜欢python中的functools.partial函数以及这个函数的概念。作为示例考虑以下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)

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

2 个答案:

答案 0 :(得分:6)

是的,lambda functions

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

func_p(1);

顺便说一下,我个人也喜欢Python中的lambdas。请考虑以下事项:

lambda b: func(b**2, b, b - 3)

使用functools无法完成。为什么有两种不同的解决方案(一种仅适用于某些情况)?

  

应该有一个 - 最好只有一个 - 显而易见的方法。

答案 1 :(得分:4)

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;
}