编译器可以删除具有相同定义的重复lambda,可以通过使用模板来实现。以下是示例代码:
#include
#include
#include
#include
template
using Func = std::function;
template
using FuncVec = std::vector>;
template
void removeDuplicateLambdas(FuncVec& vec, F f)
{
auto pred = [&](Func func){ return func.target() == f.target(); };
vec.erase(std::remove_if(vec.begin(), vec.end(), pred), vec.end());
}
int main()
{
FuncVec vec;
auto lambda1 = [](){ return 0; };
auto lambda2 = [](){ return 1; };
auto lambda3 = [](){ return 0; };
vec.push_back(lambda1);
vec.push_back(lambda2);
vec.push_back(lambda3);
removeDuplicateLambdas(vec, lambda1);
std::cout << vec.size() << std::endl; // Output: 2
return 0;
}