理解类型擦除
1. 从示例到泛化
在 C++ 中, std::function 是通用的多态函数包装器,也是通用的可调用对象。它可用于存储任何可调用实体,如函数、lambda 表达式、仿函数(带有 operator() 的对象)或成员函数指针。这些不同可调用实体的唯一要求是它们必须具有相同的调用签名,即接受相同的参数并返回相同类型的结果。
以下是一个示例:
std::function<int(long, double)> f;
上述代码声明了一个可调用对象 f ,它可以接受两个参数( long 和 double ,或者更准确地说,是任何可转换为 long 和 double 的参数),并返回一个可转换为 int 的结果。具体对参数做什么以及返回什么结果,由赋值给 f 的具体可调用实体决定。
// Example 04
std::function<size_t(const std::string&)> f;
size_t f1(const std::string& s) { return s.capacity(); }
f = f1;
std::cout << f("abcde"); // 15
c
超级会员免费看
订阅专栏 解锁全文
804

被折叠的 条评论
为什么被折叠?



