una sirve qué que predefinidas para las herramientas hacer grupo funciones funcion ficha encuentran definicion crea como biblioteca function boost default arguments boost-function

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); }