gpt4 book ai didi

c++ - 如何用 std::function 和 std::ref 替换 std::ptr_fun

转载 作者:太空狗 更新时间:2023-10-29 19:51:34 24 4
gpt4 key购买 nike

我正在尝试学习 C++11 的新特性,我有这段代码:

void print(int t, string separator)
{
cout << t << separator;
}


int elements[] = { 10, 20, 30, 40, 50, 60, 40 };
string delim = " - ";

for_each(elements, elements + 7, bind2nd(ptr_fun(print), delim));

输出:

10 - 20 - 30 - 40 - 50 - 60 - 40 -

关于ptr_fun, this 网站说:

自 C++11 起,此函数和相关类型已弃用,取而代之的是更通用的 std::functionstd::ref,两者都从普通函数创建可调用适配器兼容的函数对象。

有人可以在没有 ptr_fun 的情况下使用为 C++11 推荐的函数重写上面的示例吗?

谢谢

最佳答案

最 C++11 的方式可能是使用 lambda(或范围 for)

for_each(elements, elements + 7, [&delim](int val){ print(val, delim); });

demo

范围:

for(int x : elements)
print(x, delim);

demo

你可以使用std::bind:

for_each(elements, elements + 7, bind(print, placeholders::_1, delim));

demo

但在这种情况下,您可以将整个内容重写为

copy(elements, elements + 7, ostream_iterator<int>(cout, delim.c_str()));

demo


如果你绝对想使用std::function,你可以修改上面的例子:

for_each(elements, elements + 7, function<void(int)>([&delim](int val){ print(val, delim); }));

for_each(elements, elements + 7, function<void(int)>(bind(print, placeholders::_1, delim)));

不过,除非您需要类型删除,否则这是毫无意义的。

关于c++ - 如何用 std::function 和 std::ref 替换 std::ptr_fun,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40575929/

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