You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 11:42:40