C++14能否用类似Java方法引用的方式调用std::vector::empty?
C++14中使用成员函数引用替代lambda作为
std::any_of谓词的问题 在C++14中,无法直接将std::vector<int>::empty(或&std::vector<int>::empty)作为谓词传递给std::any_of,核心原因是:std::vector::empty是非静态成员函数,它需要绑定到具体的std::vector实例才能执行——成员函数调用时隐含了一个this指针参数,而std::any_of期望的是一个能接收单个const std::vector<int>&参数的可调用对象,裸成员函数指针不满足这个要求。
可行的替代方案
1. 使用std::mem_fn包装成员函数指针
std::mem_fn可以将成员函数指针转换为一个适配的可调用对象,自动处理this指针的绑定,完美匹配std::any_of的要求:
#include <functional> // 必须包含此头文件 std::any_of(vec.begin(), vec.end(), std::mem_fn(&std::vector<int>::empty));
2. 使用std::bind绑定成员函数
std::bind通过占位符显式指定成员函数的对象参数,同样可以生成符合要求的可调用对象:
#include <functional> std::any_of(vec.begin(), vec.end(), std::bind(&std::vector<int>::empty, std::placeholders::_1));
3. 保留原lambda写法
你最初的lambda写法在C++14中完全合法且可读性优秀,不需要强行替换:
std::any_of(vec.begin(), vec.end(), [](const auto& subvec) { return subvec.empty(); });
内容的提问来源于stack exchange,提问作者Jack Sack
相关产品推荐
相关产品推荐

