bind2nd的注意事项 zz
http://blog.pfan.cn/akey307/40759.html
bind2nd 的第一参数是一个函数 (假设为f), 那么 f 的参数不可以为引用, 比如,
class Stock
{
...
public:
hasName(string);
hasName_2(string &);
};
list <Stock> l;
l.push_back(...);
...
find_if(l.begin(), l.end(), bind2nd(mem_fun_ref(&Stock::hasName), "Shell")); // 这个是正确的
find_if(l.begin(), l.end(), bind2nd(mem_fun_ref(&Stock::hasName_2), "Shell")); // 这个是错误的, 不能通过编译
这是因为 bind2nd 第二个参数也是引用, 如果 f 的参数也是引用, 那么在 bind2nd 的内部, 就会出现引用的引用, 所以会产生编译错误。