SYK*_*SYK 1 c++ lambda boost if-statement
我一直在尝试通过以下代码模拟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)
)
);
}
Run Code Online (Sandbox Code Playgroud)
lambda :: bind按副本绑定.因此,表达式bind(&STL::push_back, AList, _1)创建了一个包含AList 副本的仿函数.由于这个仿函数的operator()是const,因此应用它会失败,因为它最终会在const对象(其内部副本)上调用非const成员(push_back).
解决方案:绑定到对AList 的引用,使用:bind(&STL::push_back, boost::ref(AList), _1)
| 归档时间: |
|
| 查看次数: |
2136 次 |
| 最近记录: |