У меня есть библиотека, которую мне нужно использовать, которая определяет следующее:
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, либо где-то еще, поэтому ссылка будет достаточной. (Хотя, поскольку я немного новичок в некоторых из этих методов, пожалуйста, убедитесь, что переписка достаточно ясна для новичка. Например, если этот разговор содержит мой ответ, я не понимаю Пожалуйста, упростите или объясните соответствие.) К вашему сведению, я использую Visual C ++ 2010.
Пожалуйста, дайте мне знать, если я могу что-то сделать, чтобы уточнить мой вопрос. Заранее спасибо за помощь!