РЕДАКТИРОВАТЬ: Обновленный чистый воспроизводимый пример.
Я новичок в C ++ с несколько лет опыта работы с C, поэтому извиняюсь, если я поступаю об этом неправильно.Я попытался разбить проблему на как можно меньший пример кода.В моем коде я унаследовал функцию обратного вызова C, и внутри нее я хочу вызвать еще один обратный вызов от члена класса.
У меня две проблемы:
a) У меня нетэкземпляр Range
в Callback
и обратный вызов не имеет для меня параметра void *.
b) Я получаю сообщение об ошибке
ошибка: недействительноиспользование нестатического члена данных 'Range :: cbk'
Я только начинаю изучать C ++ и правила ООП, поэтому извиняюсь, если я делаю вещи, которые в корне ошибочны.
#include <iostream>
#include <functional>
class Range
{
public:
typedef std::function<void()> TCallback;
TCallback cbk;
Range()
{
cbk = std::bind(&Range::RunTest, this);
}
void Close() {}
~Range() { Close(); }
void RunTest()
{
std::cout << "RunningTest\n";
}
};
static void Callback(bool ev)
{
if (ev)
Range::cbk();
}
int main()
{
std::function<void(bool)> test;
Range r1;
test = std::bind(Callback, 1);
test(1);
return 0;
}