Нет цели () boost :: function функции-члена - PullRequest
0 голосов
/ 28 апреля 2011

Я пытаюсь получить указатель на функцию следующим образом:

 boost::function<void(float)> Function;
 Function = boost::bind(&myClassType::myMemberFunction, this, _1);
 void(*)(float) finalFunction = *Function.target<void(*)(float)>();
/* crash becouse Function.target<void(*)(bool)>() is null */

Но я не могу получить указатель.Где я не прав?Я сделал что-то, что не разрешено?

(я должен передать finalFunction в lua_register.)

1 Ответ

1 голос
/ 28 апреля 2011

function::target() определено (я использую черновик C ++ 11, который, мне кажется, немного более понятен, чем ссылка Boost ) следующим образом:

на C ++ 0x n3290 20.8.11.2.5 [func.wrap.func.targ] / 3

Возвращает: если target_type () == typeid (T) указатель на цель сохраненной функции;в противном случае - нулевой указатель.

В вашем случае T - это ваш тип void(*)(float), но Function.target_type() вовсе не таков, это тип выражения boost, используемый для инициализации boost:: function.

Короче говоря, да, это не разрешено.Обходные пути не очевидны, но вот один: понижение boost :: function к обычному указателю на функцию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...