Я пытаюсь использовать лямбду с состоянием в качестве параметра указателя функции, здесь состояние означает, что оно захватывает из своего контекста. В соответствии с этой проблемой это незаконно: Почему неявное преобразование лямбда-функции в указатель на функцию запрещает захват статических членов по ссылке?
Текущая функция, в которую я хочу передать лямбду: void foo( void( func* )( unsigned long ) )
Это упрощенная версия того, где я создаю лямбду, которую хочу передать:
void MyClass::myClassFunc( int a, int b, int c )
{
auto myLambda = [&]( unsigned long val ){ a+=val;b+=val;c+=val; };
foo( /*some magic conversion*/ myLambda );
}
Простое решение, перегрузка foo
: void foo( std::function< void( unsigned long ) > func )
Простое решение нежелательно, поскольку оно требует от меня изменения кода, который не принадлежит мне. Есть ли способ, которым я могу как-то преобразовать лямбду только в вызывающий код?
std::function
не рекомендуется? Это самый простой способ принять произвольные типы функций. (В качестве альтернативы вы можете сделать все, что использует функтор, шаблоном, параметризованным типом функтора; это позволит избежать любых накладных расходов, которые могут возникнуть при созданииstd::function
). - person Mike Seymour   schedule 26.02.2014void foo( void( func* )( unsigned long ) )
? Если это так, мне бы очень хотелось, чтобы вы опубликовали ответ, объясняющий, как написать указанную оболочку. - person Jonathan Mee   schedule 27.02.2014MyClass
кmyClassFunc
. - person Jonathan Mee   schedule 27.02.2014