Я пытаюсь использовать статический полиморфизм вместо динамического полиморфизма с механизмом сигнал / слот Qt.Но я получаю ошибку компиляции.Что не так в моем коде?Что такое обходной путь?
devices.h
#ifndef DEVICES_H
#define DEVICES_H
#include <QtCore>
#include <qdebug.h>
class DeviceController : public QObject
{
Q_OBJECT
public:
explicit DeviceController(QObject *parent = nullptr):QObject(parent){}
virtual ~DeviceController() {}
void doAllDevicesInit(){
emit deviceAInitSignal();
}
signals:
void deviceAInitSignal();
};
template<typename T> class BaseDevice {
public:
void init() {
static_cast<T*>(this)->doInit();
qDebug() << QString("BaseDevice initialized!");
}
};
class DeviceA : public BaseDevice<DeviceA> {
public:
void doInit() {
qDebug() << "DeviceA initialized!";
}
};
#endif // DEVICES_H
main.cpp
#include "devices.h"
int main(int argc, char *argv[])
{
Q_UNUSED(argc);Q_UNUSED(argv);
DeviceA deviceA;
DeviceController deviceController;
QObject::connect(&deviceController,&DeviceController::deviceAInitSignal,
&deviceA, &DeviceA::init);
deviceController.doAllDevicesInit();
return 0;
}
Компиляциявывод
Qt5.12.2 / 5.12.2 / gcc_64 / include / QtCore / qobjectdefs_impl.h: 414: 94: ошибка: недопустимый static_cast от типа 'QObject *' до типа 'QtPrivate:: FunctionPointer :: *) ()> :: Object * '{aka' BaseDevice * '} FuncType :: вызов шаблона (static_cast (this _) -> функция, static_cast (r), a);