Реализовать функтор без операций, используя boost::bind

У меня есть функция void get(boost::function<void(void)> callback) { callback(); }. Я хочу сделать вызов типа get(boost::bind(/* don't know what to put here*/)); без реализации каких-либо других функций, переменных или структур, чтобы обратный вызов ничего не делал. Можно ли реализовать такой обратный вызов «без операции» в C++03?

Использование boost::bind() желательно, но не обязательно - может быть, есть какие-то другие приемы для достижения моей цели.


person abyss.7    schedule 24.10.2011    source источник
comment
Почему бы просто не использовать неактивную функцию, например void noop() {}?   -  person Some programmer dude    schedule 24.10.2011
comment
@JoachimPileborg, потому что это означало бы реализацию функции, которой ОП явно хочет избежать.   -  person avakar    schedule 24.10.2011
comment
... или в классном C++11: [](){}   -  person David Rodríguez - dribeas    schedule 24.10.2011
comment
@avakar: Иоахим сомневается в причинах отказа от простой функции noop.   -  person David Rodríguez - dribeas    schedule 24.10.2011
comment
@avakar: Почему бы и нет? еще хороший вопрос. Если у ОП есть одно странное ограничение, то у него могут быть и другие, поэтому было бы полезно узнать, откуда берется ограничение.   -  person Mike Seymour    schedule 24.10.2011
comment
@avakar, самое простое решение, которое все еще работает в старых версиях C ++, - это использовать неактивную функцию. Если abyss.7 не может этого сделать и не может использовать лямбда-выражения C++11, то я думаю, что он мало что может сделать.   -  person Some programmer dude    schedule 24.10.2011


Ответы (1)


Вы можете использовать что-то вроде boost::bind(std::plus<int>(), 0, 0), которое должно быть сведено к минимуму.

Код стал бы более ясным, если бы вы ослабили ограничение и вместо этого определили недействующий функтор.

person Mike Seymour    schedule 24.10.2011
comment
Преобразуется ли function<int(void)> неявно в function<void(void)>? - person Steve Jessop; 24.10.2011
comment
@SteveJessop: Более или менее. function<void(void)> может принимать объект функции, который не принимает параметров, но возвращает значение. - person Nicol Bolas; 24.10.2011
comment
@SteveJessop: Да (или, по крайней мере, функтор, возвращающий значение, можно преобразовать в boost::function, который не т). - person Mike Seymour; 24.10.2011