Hep*_*tic 3 c++ stl boost-bind
这有什么问题:
template <typename T>
std::list<T> & operator+=(std::list<T> & first, std::list<T> const& second)
{
std::for_each(second.begin(), second.end(), boost::bind(&std::list<T>::push_back, first, _1));
return first;
}
Run Code Online (Sandbox Code Playgroud)
编译很好,但不起作用.
您需要使用boost::ref通过引用传递参数/对象,否则bind会创建内部副本.
std::for_each(
second.begin(), second.end(),
boost::bind(&std::list<T>::push_back, boost::ref(first), _1)
);
Run Code Online (Sandbox Code Playgroud)
请注意,尽管Cat Plus Plus的解决方案对您有用,但在C++ 03中(在即将推出的标准版本中的lambdas出现之前)鼓励使用标准库算法和仿函数的方法.不幸的是,在某些情况下,他们自己变得非常复杂,但在这种情况下,我认为他们产生了更清晰的代码:
std::copy(second.begin(), second.end(), std::back_inserter(first));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2275 次 |
| 最近记录: |