gpt4 book ai didi

c++ - for_each 中的类方法

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

有类和事件结构:

struct Foo
{
Foo(): name("nx"), val(9) {}
string name;
int val;
};

class Base
{
public:
Base()
{
/*array.push_back(Foo());
array.push_back(Foo());
array.push_back(Foo()); //fill array Foo
array.push_back(Foo());
array.push_back(Foo());*/
}
void Define(Foo* desktop)
{
cout << desktop->name << " " << desktop->val << "\n";
}

void Oblem()
{
/*for(int i = 0; i < array.size(); ++i)
{
Define(&array[i]);
}*/
for_each(array.begin(), array.end(), mem_fun_ref(&Base::Define));
}
public:
std::vector<Foo> array;
};

如何替换 for_each 算法中注释掉的循环?

我现在有这些错误:

  1. 错误:对“(std::mem_fun1_ref_t) (Foo&)”的调用不匹配|
  2. 候选者是:_Ret std::mem_fun1_ref_t<_Ret, _Tp, _Arg>::operator()(_Tp&, _Arg) const [with _Ret = void, _Tp = Base, _Arg = Foo*]|

最佳答案

Base::Define 接受两个参数:Foo* desktop 和一个隐式的 Base* this。您需要将当前的 this 绑定(bind)到 Oblem 中,以获得仅采用 Foo 的函数。此外,Define 应该将其参数作为 Foo& desktop(或者更好,如果那是真实代码,Foo const& desktop)。

使用 TR1(或它的 Boost 实现)中的标准功能的完整解决方案是:

void Define(Foo const& desktop) const
{
cout << desktop.name << " " << desktop.val << "\n";
}

void Oblem() const
{
for_each(
array.begin(), array.end()
, std::bind( &Base::Define, this, _1 )
);
}

关于c++ - for_each 中的类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7667376/

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