gpt4 book ai didi

c++ - 将循环转移到 C++03 for_each

转载 作者:太空狗 更新时间:2023-10-29 21:27:37 25 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
Using bind1st for a method that takes argument by reference

我有以下传统的 C++03 循环(使用 auto 仅用于堆栈溢出空间效率):

for (auto it = some_vector.begin(); it != some_vector.end(); ++it)
{
foobar.method(*it);
}

在 C++11 中,我设法将其重写为以下 for_each 调用,效果非常好:

std::for_each(some_vector.begin(), some_vector.end(),
std::bind(&Foobar::method, std::ref(foobar), _1));

(当然我可以在 C++11 中使用 lambda,但这不是重点。)不幸的是,std::bind 不是 C++03 的一部分,所以我尝试了用 std::bind1ststd::mem_fun_ref 模拟它:

std::for_each(some_vector.begin(), some_vector.end(),
std::bind1st(std::mem_fun_ref(&Foobar::method), std::ref(foobar)));

但这在 Visual Studio 中触发了 C2535 错误(“成员函数已定义或声明”):

// inside class binder1st in header xfunctional

result_type operator()(const argument_type& _Right) const
{ // apply functor to operands
return (op(value, _Right));
}

result_type operator()(argument_type& _Right) const
{ // apply functor to operands <--- ERROR C2535 HERE
return (op(value, _Right));
}

这是 Visual Studio 中的常量正确性错误,还是我做错了什么?

此外,std::ref 似乎不是 C++03 的一部分。有什么解决方法吗?

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