function - sirve - Valor predeterminado para boost: argumento de función?
funciones definicion en excel (2)
Tengo una función que quiero tomar un argumento opcional boost :: function como devolución de llamada para informar una condición de error. ¿Hay algún valor especial que pueda usar el valor predeterminado para hacerlo opcional?
Por ejemplo, con un puntero de función regular puedo hacer:
void my_func(int a, int b, t_func_ptr err_callback=NULL) {
if (error && (err_callback != NULL))
err_callback();
}
¿Puedo hacer algo similar con boost :: function reemplazando el puntero a función?
Puede usar 0
(el equivalente de C ++ de NULL
) para el valor predeterminado de un argumento boost :: function, que resultará en un objeto de función vacío. Puede probar si está vacío llamando a su método empty()
, comparándolo con 0, o simplemente usándolo en un contexto booleano:
void my_func(int a, int b, boost::function<void()> err_callback = 0) {
if (error && err_callback) // tests err_callback by converting to bool
err_callback();
}
boost::function
objetos de boost::function
funcionan de manera muy parecida a los punteros de función simple a este respecto.
Un buen valor especial podría ser una boost::function
construida por defecto.
Una function
vacía evalúa falso en un contexto booleano (como un puntero NULL), o puede usar el método empty()
para probar si un envoltorio de objeto de función realmente contiene una función. Ver el tutorial boost :: function .
Aquí hay un ejemplo de código:
#include <boost/function.hpp>
#include <iostream>
typedef boost::function<void (int code)> t_err_callback;
void do_callback(int code)
{
std::cout << "Error " << code << std::endl;
}
void my_func(int a, int b, t_err_callback err_callback=t_err_callback())
{
bool error = true; // An error happened
int error_code = 15; // Error code
if (error && !err_callback.empty())
err_callback(error_code);
}
int main()
{
my_func(0, 0);
my_func(0, 0, do_callback);
}