Могу ли я использовать лямбда-функция или std :: объект функции вместо указателя функции?

У меня есть библиотека, которую мне нужно использовать, которая определяет следующее:

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.

Пожалуйста, дайте мне знать, если я могу что-нибудь сделать, чтобы прояснить свой вопрос. Заранее благодарим за помощь!

12
задан Community 23 May 2017 в 10:24
поделиться