Нулевая реализация типа boost :: functions

У меня есть что-то вроде этого:

boost::function<void(void)> redStyle = boost::bind(colorStyle, "red");

boost::function<void(void)> blueBlinkingStyle = boost::bind(animatedStyle, "blue", BLINKING);

Это правильный способ определить nullStyler:

void nothing(){}
boost::function<void(void)> noStyle = boost::bind(nothing);

Я думал, что мог бы сделать это таким образом, но пустые функции throw:

boost::function<void(void)> noStyle;

Код, использующий функцию стилера, может проверять наличие пустых значений вместо использования «шаблона нулевого объекта». Что лучше? Наличие в моем пространстве имен Detail странной функции «ничего» или проверка на пустоту?

2

Решение

Я бы предпочел иметь неоперативную функцию. Это проясняет намерение и избавляет вас от проверки, является ли функтор пустым или нет (при условии, что вам не придется проверять чеки по другим причинам).

Обратите внимание, что вам не нужно звонить связать. Вы можете сделать это:

boost::function<void(void)> noStyle = nothing;

Пример:

#include <boost/function.hpp>
#include <iostream>

void hello()
{
std::cout << "hello" << std::endl;
}

int main()
{
boost::function<void(void)> f = hello;
f();
}
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]