Tengo el siguiente programa que usa ptr_fun con una función lambda.ptr_fun con una función lambda
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <cstring>
using namespace std;
int main()
{
string target="aa";
vector<string> v1;
v1.push_back("aa");
v1.push_back("bb");
auto stringcasecmp=[](string lhs, string rhs)->int
{
return strcasecmp(lhs.c_str(), rhs.c_str());
};
auto pos = find_if(
v1.begin(), v1.end(),
not1(bind2nd(ptr_fun(stringcasecmp), target))
);
if (pos != v1.end())
cout << "The search for `" << target << "' was successful.\n"
"The next string is: `" << pos[1] << "'.\n";
}
Recibo los siguientes mensajes de error.
stackoverflow.cpp: In function ‘int main()’:
stackoverflow.cpp:21:41: error: no matching function for call to ‘ptr_fun(main()::<lambda(std::string, std::string)>&)’
stackoverflow.cpp:22:6: error: unable to deduce ‘auto’ from ‘<expression error>’
¿Cómo puedo modificar el código (mínimamente) para que se compile?
Sólo una pequeña nota al margen: Si usted está planeando sobre el uso de un lambda como el que tienen aquí mucho, es posible que Considere pasar los argumentos como referencia. Ahorre gran cantidad de copia de cadenas. –
¡Es posible que su lambda 'stringcasecmp' sea recursiva! – quamrana
@quamrana ¿Por qué es recursivo? – ggg