У меня есть функция, что я хочу взять дополнительное повышение:: аргумент функции как обратный вызов для создания отчетов о состоянии ошибки. Есть ли некоторое специальное значение, я могу использовать значение по умолчанию для создания его дополнительным?
Например, с указателем регулярной функции я могу сделать:
void my_func(int a, int b, t_func_ptr err_callback=NULL) {
if (error && (err_callback != NULL))
err_callback();
}
Могу я делать что-то похожее с повышением:: функция, заменяющая указатель функции?
Вы можете использовать 0
(эквивалент NULL
в C ++) для значения по умолчанию для функции boost :: аргумент, который приведет к пустому объекту функции. Вы можете проверить, пуст ли он, вызвав его метод empty ()
, сравнив его с 0 или просто используя его в логическом контексте: объекты
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
работают почти так же, как обычные указатели на функции в этом отношении.
Хорошим специальным значением может быть построенная по умолчанию boost :: function
.
Пустая функция
оценивает false в логическом контексте (например, NULL-указатель), или вы можете использовать метод empty ()
, чтобы проверить, действительно ли оболочка функционального объекта содержит функция. См. Учебное пособие по boost :: function .
Вот пример кода:
#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);
}