Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

216
Vistas
¿Por qué esta función de plantilla no reconoce el tipo devuelto por lamda?

Esta función de plantilla no reconoce el tipo devuelto por la lamda, incluso especificándolo descomentando '->void'.

¿Por que sucede?

¿Qué podría hacer para sortear este problema?

 #include<iostream> #include<array> template<typename T, typename S, size_t SIZE> void for_each(std::array<T,SIZE>& arr, S(*func)(int&)) { for (auto i{0}; i != arr.size(); ++i) func(arr[i]); } int main() { std::array<int, 5> five_elems{10, 20, 30, 40, 50}; for_each(five_elems, [](int& ref)/*->void*/{ref *= 2; std::cout << ref << ' '; }); //for (auto i : five_elems) // i*=2; for (const auto i : five_elems) std::cout << i << ' '; }
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Su for_each espera un puntero de función, pero la conversión implícita (de lambda a puntero de función) no se considerará en la deducción del argumento de la plantilla , lo que hace que la llamada falle.

Puede realizar la conversión explícitamente:

 for_each(five_elems, static_cast<void(*)(int&)>([](int& ref)/*->void*/{ref *= 2; std::cout << ref << ' '; }));

O

 for_each(five_elems, +[](int& ref)/*->void*/{ref *= 2; std::cout << ref << ' '; });

O simplemente deje de usar el parámetro de puntero de función. Puede agregar un nuevo parámetro de plantilla de tipo y luego la lambda directamente.

 template<typename T, size_t SIZE, typename F> void for_each(std::array<T,SIZE>& arr, F func) { for (auto i{0}; i != arr.size(); ++i) func(arr[i]); }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda