У меня есть библиотека, которую мне нужно использовать, которая определяет следующее:
typedef void CallbackFunction(const int& i);
и имеет функцию регистрации вашего обратного вызова, который выглядит следующим образом:
void registerCallback(CallbackFunction* pCallback);
Поскольку я хотел бы захватить состояние нескольких переменных, которые будут использоваться в обратном вызове, я не могу просто использовать простую функцию. Я бы предпочел использовать функцию лямбда, но следующее не компилируется:
auto fCallback = [](const int& i) {
cout << i << endl;
};
registerCallback(fCallback);
вместо этого я получаю ошибку:
error C2664: 'registerCallback' : cannot convert parameter 1 from '`anonymous-namespace'::<lambda0>' to 'CallbackFunction (__cdecl *)'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
Я много читал на эту тему и пытался несколько разных (возможно, идиотских) подходов, но я не могу заставить это работать. Выделение функции позволяет компилировать код, но (неудивительно) он сбой. Возможно, я упустил это решение либо здесь, в StackOverflow, либо в другом месте, поэтому ссылки хватит. (Хотя, поскольку я немного новичок в некоторых из этих методов, убедитесь, что корреспонденция достаточно понятна для новичков. Например, если этот разговор содержит мой ответ, я не понимаю. Пожалуйста, упростите или объясните корреспонденцию.) FYI, я использую Visual С++ 2010.
Пожалуйста, дайте мне знать, если я могу что-то сделать, чтобы уточнить мой вопрос. Заранее спасибо за помощь!