У меня есть (библиотека API, так что я не могу изменить прототип функции) функции, которая записывается следующим образом:C++ - функция связывания
void FreeContext(Context c);
Теперь, в каком-то момент моем исполнении I есть Context* local_context;
переменная, и это также не подлежит изменению.
Я хотел бы использовать boost::bind
с FreeContext
функции, но мне нужно, чтобы получить Context
из локальной переменной Context*
.
Если я пишу свой код следующим образом, компилятор говорит, что это «незаконным окольные»:
boost::bind(::FreeContext, *_1);
мне удалось решить эту проблему следующим образом:
template <typename T> T retranslate_parameter(T* t) {
return *t;
}
boost::bind(::FreeContext,
boost::bind(retranslate_parameter<Context>, _1));
Но это решение кажется мне не очень хорошим. Любые идеи о том, как решить это, используя что-то вроде *_1
. Может быть, написать небольшую лямбда-функцию?
Вы пробовали Boost.Lambda? – kennytm