По соображениям проектирования мне нужно придумать способ вызова QObject::connect()
, где указатели функций передаются как возвращаемые значения вызовов функций.А именно, вместо использования ванильного синтаксиса connect(sender, &Sender::valueChanged, receiver, &Receiver::updateValue);
, я должен сделать что-то вроде следующего:
//in main.cpp
SENDER *sender = new SENDER;
RECEIVER *receiver = new RECEIVER;
connect(sender, sender->get_func(), receiver, receiver->get_func() );
где SENDER и RECEIVER определены следующим образом:
#include <QObject>
class SENDER : public QObject {
Q_OBJECT
public:
void(* get_func() ) (double, double);
signals:
void send_data(double x, double y);
};
void (* SENDER::get_func() )(double, double)
{
return send_data;
}
class RECEIVER : public QObject {
Q_OBJECT
public:
void receive_data(double x, double y);
void(* get_func() ) (double, double);
};
void (* RECEIVER::get_func() )(double, double)
{
return receive_data;
}
int main()
{
SENDER *sender = new SENDER;
RECEIVER *receiver = new RECEIVER;
QObject::connect(sender, sender->get_func(), receiver, receiver->get_func() );
}
ПопыткиПри компиляции выдается следующая ошибка:
/home/abc/work/mainwindow.cpp:41: error: no matching function for call to ‘MainWindow::connect(SENDER*&, void (*)(double, double), RECEIVER*&, void (*)(double, double))’
connect(sender, sender->get_func(), receiver, receiver->get_func() );
Что я здесь не так делаю?