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

287
Vistas
Cómo reemplazar std::bind con lambda dentro de steady_timer::async_wait

Vive en Coliru

 #include <iostream> #include <boost/asio.hpp> #include <functional> class printer { public: printer(boost::asio::io_context& io) : timer_(io, boost::asio::chrono::seconds(1)) { timer_.async_wait(std::bind(&printer::print, this)); // timer_.async_wait([this]() { // print(); // }); } void print() { std::cout << "hello world" << std::endl; } private: boost::asio::steady_timer timer_; }; int main() { boost::asio::io_context io; printer p(io); io.run(); return 0; }

Traté de reemplazar la siguiente línea:

 timer_.async_wait(std::bind(&printer::print, this));

con

 timer_.async_wait([this]() { print(); });

Pero falló y el compilador informa los siguientes errores:

 main.cpp: In constructor 'printer::printer(boost::asio::io_context&)': main.cpp:12:22: error: no matching function for call to 'boost::asio::basic_waitable_timer<std::chrono::_V2::steady_clock>::async_wait(printer::printer(boost::asio::io_context&)::<lambda()>)' 12 | timer_.async_wait([this]() { | ~~~~~~~~~~~~~~~~~^~~~~~~~~~~ 13 | print(); | ~~~~~~~~ 14 | }); | ~~

Pregunta > ¿Cuál es la forma correcta de reescribir la expresión std::bind con lambda?

Gracias

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Su lambda no tiene la firma requerida.

Basado en la documentación de boost , la devolución de llamada toma un argumento const boost::system::error_code& . std::bind le permite ser un poco más flexible en la firma de la función ( ¿Por qué std::bind se puede asignar a std::function con argumentos no coincidentes? ), Pero las lambdas deben ser una coincidencia exacta.

El siguiente código parece funcionar para mí.

 timer_.async_wait([this](auto const &ec) { print(); });
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