2013-10-09 2 views
2

у меня есть что-то вроде этого:Null реализация типа повышения :: функции

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; 

Код, использующий функцию стайлера, может проверять на наличие пустого пространства вместо того, Null Object Pattern ". Что лучше? Имеете ли странное ничего в моем пространстве имен Detail или проверяете на пустое?

ответ

3

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

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

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(); 
} 
+0

Или. 'std :: function noStyle = [] {};' ..., который требует от вас набрать 3 символа меньше. – Nawaz

+0

@ Наваз хорошая точка, хотя я всегда предполагал, что используется функция boost :: function, если у вас нет поддержки C++ 11. – juanchopanza

+1

@Angew Я, очевидно, воспринимаю всю «C++ 11 - это C++» вещь слишком далеко :) – juanchopanza

Смежные вопросы