gpt4 book ai didi

c++ - 绑定(bind)的不是一个值,而是一个函数(获取这个函数的值)

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:56:30 26 4
gpt4 key购买 nike

假设我有以下功能:

int foo (int a)
{
return something;
}

我怎样才能做这样的事情?

vector<int> v;

std::for_each( v.begin(), v.end(), std::bind1st(std::minus<int>(), foo) );

我希望它像这样工作:for_each 将当前元素传递给仿函数,仿函数调用 foo 然后减去传递的 vector 元素和调用 foo 的结果。是否可以仅使用 std 而不是 boost 或自写仿函数来实现这一点?

最佳答案

嗯,这有点可怕,但在 C++11 中......

#include <vector>
#include <functional>
#include <algorithm>

int foo(int a)
{
return a;
}

int operator-(int b, std::function<int(int)> a)
{
return b - a(b);
}

int main()
{
std::vector<int> v = {1,2,3,4,5};
std::for_each( v.begin(), v.end(), std::bind((int(*)(int, std::function<int(int)>))(&operator-), std::placeholders::_1, &foo) );
return 0;
}

使用 lambda 的不那么可怕的方式

std::for_each(v.begin(), v.end(), [](int a) -> int { return a - foo(a); });

关于c++ - 绑定(bind)的不是一个值,而是一个函数(获取这个函数的值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9095101/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com