Мне нужна помощь с передачей указателя функции на C ++.Я не могу связать одну функцию для класса с другой функцией.Я объясню.В любом случае я добавлю резюме кода моей программы, оно намного больше, чем код, представленный здесь, но для более простоты я поместил только ту часть, которая мне нужна, чтобы она работала нормально.
У меня есть один класс (MainSystem
) и внутри у меня есть указатель объекта на другой класс (ComCamera
).Последний класс - SocketServer
, и я хочу, чтобы, когда сокет получал какие-либо данные, он отправлял функцию связывания в MainSystem.
ComCamera - это ресурс, совместно используемый с большим количеством классов, и мне нужно связать функции ComCamera:: vRecvData для MainSystem :: vRecvData или другой функции другого класса для вызова при получении данных и отправке данных в ассоциированный класс функций.
Может ли кто-нибудь мне помочь?
РЕДАКТИРОВАНИЕ - РЕШЕНИЕ НИЖЕ
main.cpp
#include <iostream>
#include <thread>
#include <string>
#include <vector>
#include <cmath>
#include <string.h>
#include <stdio.h>
#include <exception>
#include <unistd.h>
using std::string;
class ComCamera {
public:
std::function<void(int, std::string)> vRecvData;
void vLinkRecvFunction(std::function<void(int, std::string)> vCallBack) {
this->vRecvData = vCallBack;
}
void vCallFromCamera() {
this->vRecvData(4, "Example");
};
};
class MainSystem {
private:
ComCamera *xComCamera;
public:
MainSystem(ComCamera *xComCamera) {
this->xComCamera = xComCamera;
this->xComCamera->vLinkRecvFunction([this](int iChannelNumber, std::string sData) {vRecvData(iChannelNumber, sData); });
}
void vRecvData(int iNumber, string sData) {
std::cout << "RECV Data From Camera(" + std::to_string(iNumber) + "): " << sData << std::endl;
};
};
int main(void) {
ComCamera xComCamera;
MainSystem xMainSystem(&xComCamera);
xComCamera.vCallFromCamera();
return 0;
}
Вывод будет:
Данные MainSystem RECV сКамера (4): пример