c ++ 0x std :: function в качестве аргумента метода

Я пытаюсь передать std :: function с помощью такого метода:

class dispatch
{
  public:
     deliver( std::function<void ( void )> task );
}

Это работает, как ожидалось. Однако я хочу передать аргументы некоторым методам, предоставленным в качестве задачи, но предпочел бы не создавать перегрузки для всех различных форм функции <...>.

например, возможно ли вообще просто создать метод, подобный следующему

deliver( std::function& task );

, и просто вызвать его с помощью

dispatch->deliver( bind( &Object::method, X ) );

или

dispatch->deliver( bind( &Object::method, X, arg1, arg2 ) );

и т. Д.

Спасибо за ввод всех. Похоже, моя настоящая ошибка связана с вызовами dispatch-> delivery с дополнительным аргументом, также являющимся вызовом привязки.

dispatch->deliver( bind( &Object::method1, X1, bind( &Object::method1, X2 ) );

ошибка: / usr / include / c ++ / v1 / function: 1539: 13: ошибка: нет соответствующей функции для вызова '__mu_expand' return __mu_expand (__ ti, __uj, __indices ());

8
задан Marco A. 28 November 2016 в 12:57
поделиться