C++中是否有类似于Python的functools.partial的等效函数?

3

我非常喜欢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++函数可以提供相似的功能?

1
дҪ жӯЈеңЁеҜ»жүҫlambdaиЎЁиҫҫејҸжҲ–иҖ…std::bindгҖӮпјҲеҗҺиҖ…еҸҜиғҪжҳҜpartialзҡ„жңҖзӣҙжҺҘеҜ№еә”пјү - undefined
2个回答

9

是的,lambda函数

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

func_p(1);

顺便说一下,我个人也更喜欢在Python中使用lambda。考虑以下代码:

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

使用functools无法完成某些操作。为什么要有两种不同的解决方案(其中一种只适用于特定情况)?

应该有一种——最好只有一种——显而易见的方法来完成它。


1
我给了你的答案一个赞,因为它是有效的;不过看一下这个答案,你可能会重新考虑你对functools的总体看法。https://dev59.com/b3A75IYBdhLWcg3wg5Zh#3252425 - undefined
@user69453 这个确实很有趣。不过,仔细想了想,他的观点似乎都与Python相关,而不是C++。所以如果在Python中这是一个权衡,我仍然不太看得出在C++中使用bind的意义。 - undefined
是的,提供的链接只适用于Python。我只是更喜欢C++中bind的语法而已。就这样 ;) - undefined

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接