【发布时间】:2013-07-09 20:25:53
【问题描述】:
我有一个带有一对 std::string 和 Person 指针的测试图
class MyMap {
public:
void clear() {
std::for_each(people.begin(), people.end(),std::bind1st(std::mem_fun(&MyMap::remove), this));
}
void remove(std::pair<std::string, Person*> p) { delete p.second; }
private:
std::map<name, Person*> people;
};
我的问题是 for_each 是否通过 ref 或 value 传递每个 Person 对?值得用我自己的吗,这个比较干净。
除此之外,如果我想使用 boost::bind 或 std::bind (c++11) 而不是 bind1st,我该怎么做?这个函数应该像具有继承 std::unary_function 的 operator() 的结构吗?
【问题讨论】:
-
"for_each 通过 ref 或 value 传递每个 Person 对": pass where?如果你在谈论函数(第三个参数),它取决于函数定义的方式。
-
查看当前功能。 for_each 不接受签名
void remove(std::pair<std::string, Person*>& p)抱怨超载 -
为什么重要?你的删除函数所做的就是删除这个人。
-
如果您可以访问 C++11,而不必为
std::bind烦恼,只需使用基于范围的for版本。 -
@dev-inside。是的。但是您可能不应该存储指针。 std::unique_ptr?
标签: c++ pass-by-reference pass-by-value stdmap