我计划使用类似于集合的容器(例如qt中的qset
或std::set
)来保存包装lambda(捕获或非捕获)的std::function
对象,以避免多次添加相同的lambda。这些类都需要用户提供键类型的比较或哈希计算功能。
但是,据我所知,如果底层lambda正在捕获,target()
方法将返回nullptr
,因此无法根据其返回值比较两个std::function
。
那么,如何比较两个任意的std::function
,或者至少从一个std::function
中计算一个唯一的值呢?
每个lambda都有自己唯一的类型,因此可以使用target_type。只有非捕获lambda可转换为函数PTR。