Значение по умолчанию для повышения:: аргумент функции?

У меня есть функция, что я хочу взять дополнительное повышение:: аргумент функции как обратный вызов для создания отчетов о состоянии ошибки. Есть ли некоторое специальное значение, я могу использовать значение по умолчанию для создания его дополнительным?

Например, с указателем регулярной функции я могу сделать:

void my_func(int a, int b, t_func_ptr err_callback=NULL) {

   if (error && (err_callback != NULL))
      err_callback();

}

Могу я делать что-то похожее с повышением:: функция, заменяющая указатель функции?

19
задан Danilo Piazzalunga 25 February 2010 в 22:49
поделиться

2 ответа

Вы можете использовать 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 работают почти так же, как обычные указатели на функции в этом отношении.

24
ответ дан 30 November 2019 в 03:33
поделиться

Хорошим специальным значением может быть построенная по умолчанию 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);
}
13
ответ дан 30 November 2019 в 03:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: