У меня есть библиотека, которую мне нужно использовать, которая определяет следующее:
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'::' to 'CallbackFunction (__cdecl *)'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
Я много читал по этой теме и пробовал несколько разных ( вероятно идиотский) подходы, но я не могу заставить это работать. Приведение функции позволяет компилировать код, но (что неудивительно) вылетает. Возможно, я пропустил решение здесь, на StackOverflow, или где-то еще, поэтому ссылки будет достаточно. (Хотя, поскольку я немного новичок в некоторых из этих методов, пожалуйста, убедитесь, что переписка достаточно ясна для новичка. Например, если этот разговор содержит мой ответ, я не понимаю Пожалуйста, упростите или объясните переписку.) К вашему сведению, я использую Visual C ++ 2010.
Пожалуйста, дайте мне знать, если я могу что-нибудь сделать, чтобы прояснить свой вопрос. Заранее благодарим за помощь!