Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

364
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda