我一直在尝试通过以下代码模拟 copy_if,但我的编译器 (g++-4.0) 一直在提示。技术上有什么问题?感谢您的帮助!
template <class STL> // a std container of class A, but I don't know if it's a list or vector or deque
void export_(STL& Alist) { //a member function
for_each(Alist0.begin(), Alist0.end(), //member data
boost::lambda::if_then(
boost::lambda::bind(&A::get_StatusTag, boost::lambda::_1) == OK, //some global enum returned by A::get_StatusTag
boost::lambda::bind(&STL::push_back, Alist, boost::lambda::_1)
)
);
}
最佳答案
lambda::bind 通过复制绑定(bind)。因此,表达式 bind(&STL::push_back, AList, _1)
创建了一个包含 AList 的拷贝 的仿函数。由于此仿函数的 operator() 是常量,因此应用它会失败,因为它最终会在常量对象(其内部拷贝)上调用非常量成员 (push_back)。
解决方案:绑定(bind)到 AList 的引用,使用:bind(&STL::push_back, boost::ref(AList), _1)
关于c++ - boost::lambda::if_then 用于 copy_if,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1265492/