Добрый вечер, подскажите.
Я написал класс чтения из pipe и заметил, что сообщения дробятся, по этому я решил создать класс буферизатора, который будет накапливать прочтенные данные. Класс, читающий данные из pipe, в своем конструкторе имеет параметр, указывающий, какую функцию надо вызвать, когда приходят данные и туда я хочу передать функцию из класса буферизатора. Напрямую это сделать нельзя, так как функция экземпляра не является static. Я начал читать про путь с использованием подставного callback, но потом наткнулся, что можно использовать std::function и std::bind. Вот это я и попытался сделать, но так и не понял, как довести дело до ума.
В классе, который читает данные из pipe я определил
class NamedPipeClass
{
NamedPipeClass(char* _pipeName, bool isClient, std::function<void(unsigned char*, unsigned int)> ReadCallBack)
{
....
onReadCallback = ReadCallBack;
};
std::function<void(unsigned char*, unsigned int)> onReadCallback;
}
И создавая экземпляр класса
MessageCollectorClass* msgCollector = new MessageCollectorClass();
NamedPipeClass* hltPipe = new NamedPipeClass(myfifo, true, std::bind(&msgCollector::AddData, this, std::placeholders_1));
но это не правильно. Подскажите, как это сделать корректно?