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 的内部, 就会出现引用的引用, 所以会产生编译错误。

Powered by Jekyll and Theme by solid

本站总访问量