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

361
Vistas
¿Cómo restringir un parámetro lambda automático a un puntero a la función miembro?

Tengo una función lambda genérica que necesita aceptar una función de puntero a miembro como parámetro. Por supuesto, puedo simplemente usar auto solo y el compilador deducirá el tipo correcto. Sin embargo, siempre que sea posible, prefiero decorar mis parámetros automáticos con * , & y const cuando corresponda, comunicando así mejor la naturaleza y la intención del tipo deducido. Si simplemente convierto el parámetro auto en auto* , obtengo un error de compilación, lo que no me sorprende mucho, ya que auto* significa un puntero normal, no un puntero a miembro. ¿Existe alguna sintaxis para restringir un parámetro auto para que acepte un puntero a miembro, o debería simplemente usar auto y olvidarme de él?

 int main() { struct S { void m() {} }; //auto l = [](auto* pmf) // ERROR //auto l = [](const auto& pmf) // Works, but uh, bit misleading I think auto l = [](auto pmf) { S s; (s.*pmf)(); }; l(&S::m); }
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Puedes declararlo como:

 auto l = [](auto S::*pmf)

Vincula el puntero a un tipo S , pero tiene sentido porque es así como lo usará.

over 4 years ago · Santiago Trujillo Denunciar

0

En C++20 puedes restringirlo con un concepto:

 #include <type_traits> template <typename T> concept MemberPointer = std::is_member_pointer_v<T>; void test() { auto foo = [](MemberPointer auto memPtr) {}; }
over 4 years ago · Santiago Trujillo Denunciar

0

Puede usar C++ 20 requires -clause para hacer esto:

 #include <type_traits> auto l = [](auto pmf) requires std::is_member_function_pointer_v<decltype(pmf)> { S s; (s.*pmf)(); };

Manifestación

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