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