клонирование boost :: function в указатель и вызов обернутой функции с этим указателем - PullRequest
0 голосов
/ 09 марта 2012

Я пытаюсь создать копию boost::function с помощью указателя и вызвать эту функцию с помощью этого указателя.Мои вопросы

  1. клонирование boost::function таким образом является правильным
  2. вызов fp->target() должен вызывать или нет функцию, заключенную в boost :: function?

Большое спасибо

  boost::function<void()> f = boost::bind(&my_f,my_value);
  boost::function<void()> fp* = new boost::function<void()>( f ); // clone f

  typedef void(*fptr_type)();
  fp->target<fptr_type>();  // doesn't work! Is this correct?

  fp->operator(); // doesn't compile
                  //=>error: statement cannot resolve address of overloaded function

Ответы [ 2 ]

2 голосов
/ 09 марта 2012

Если boost :: function предоставляет конструктор копирования, вы можете предположить, что он будет работать и позаботиться обо всех проблемах жизни в этом случае (иначе это не будет предоставлено, и вы должны подать отчет об ошибке наих багзилла).

fp->operator();

Это просто функция, которую вы хотите сделать:

fp->operator()();

Или как указано выше:

(*fp)();
1 голос
/ 09 марта 2012

Посмотрите этот код, я думаю, это то, что вы хотите сделать:

void my_f(void)
{
    cout << "hello";
}

int main(void){

  boost::function<void()> f = boost::bind(&my_f);
  boost::function<void()>* fp = new boost::function<void()>( f ); 

  typedef void(*fptr_type)();
  fp->target<fptr_type>(); 

  (*fp)();
}

Скомпилировано с GCC, и это хорошо работает, я вижу cout.

...