c++ - boost::lambda::if_then 用于 copy_if

标签 c++ boost lambda 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)
        )
    );
}

最佳答案

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/

相关文章:

python Mechanize 迭代选择选项并使用lambda提交

c++ - 未使用的 STL 容器是否分配内存?

c++ - 使用 C++/boost 套接字的简单客户端/服务器在 Windows 下工作,但在 Linux 下失败

c++ - 运行给出错误的数字,但调试效果很好?

matlab - Matlab 中的多行匿名函数?

c# - 你如何用linq表达式划分一个属性

c++ - 为什么从二进制文件中读取这个流会在 0x1A 字符处停止?

c++ - 在 C++ 中声明对象的问题

python - 如何使用ctypes查看python中的指针值更改

c++ - Boost 和 Qt 库中有哪些 namespace 标识符?