es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Qué es “a>b” como parámetro que requiere un puntero de función o una expresión lambda?

A continuación se muestra el uso muy simple de boost::log::set_filter:

#include <boost/log/trivial.hpp>
#include <boost/log/core.hpp>
#include <boost/log/trivial.hpp>
#include <boost/log/expressions.hpp>
#include <boost/log/utility/setup/file.hpp>
namespace logging = boost::log;

void test()
{
logging::add_file_log("sample.log")->set_filter(
logging::trivial::severity >= logging::trivial::info
);
}

Según la definición de set_filter:

template< typename FunT >
void set_filter(FunT const& filter)
{
BOOST_LOG_EXPR_IF_MT(boost::log::aux::exclusive_lock_guard< mutex_type > lock(m_Mutex);)
m_Filter = filter;
}

filter se supone que es un puntero a función o expresión lambda. ¿Qué es logging::trivial::severity >= logging::trivial::info y cómo se castea a una función?

logging::trivial::severity >= logging::trivial::info es una expresión booleana que se utiliza como filtro para la función set_filter. En este caso, la expresión se evalúa a Verdadero si la severidad del registro de registro es info o superior, y Falso en caso contrario. Se puede utilizar como filtro en la función set_filter porque es una función lambda, que es un objeto que se puede llamar como una función.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La línea logging::trivial::severity >= logging::trivial::info en realidad no es una función ni un puntero a función, sino una expresión booleana utilizada como filtro para decidir qué mensajes de registro deben escribirse en el archivo de registro. El operador >= compara el nivel de gravedad de cada mensaje de registro con el nivel info, y solo se escribirán en el archivo de registro los mensajes con un nivel de gravedad mayor o igual a info.

    Esta expresión booleana no se convierte en una función. En cambio, se pasa como una expresión lambda a la función set_filter como argumento. La expresión lambda se convierte automáticamente en un objeto de función, que luego se puede almacenar como la función de filtro para el registrador.

Comments are closed.