resueltos interfaz interfaces entre ejercicios ejemplo diferencia clases clase abstractas abstracta c++ qt interface qt4 qobject

c++ - interfaz - ejercicios de clases abstractas e interfaces en java



Interfaces Qt o clases abstractas y qobject_cast() (1)

Después de investigar y leer la documentación de qobject_cast , encontré esto:

qobject_cast () también se puede usar junto con interfaces; ver el ejemplo de Plug & Paint para más detalles.

Aquí está el enlace al ejemplo: Plug & Paint .

Después de desenterrar el encabezado de interfaces en el ejemplo, encontré la macro Q_DECLARE_INTERFACE que debería permitirle hacer lo que desea.

Primero, no heredes QObject de tus interfaces. Para cada interfaz que tenga, use la declaración Q_DECLARE_INTERFACE como esta:

class YourInterface { public: virtual void someAbstractMethod() = 0; }; Q_DECLARE_INTERFACE(YourInterface, "Timothy.YourInterface/1.0")

Luego, en su definición de clase, use la macro Q_INTERFACES , como esta:

class YourClass: public QObject, public YourInterface, public OtherInterface { Q_OBJECT Q_INTERFACES(YourInterface OtherInterface) public: YourClass(); //... };

Después de todo este problema, el siguiente código funciona:

YourClass *c = new YourClass(); YourInterface *i = qobject_cast<YourInterface*>(c); if (i != NULL) { // Yes, c inherits YourInterface }

Tengo un conjunto bastante complejo de clases de C ++ que se vuelven a escribir desde Java. Entonces cada clase tiene una única clase heredada, y luego implementa una o más clases abstractas (o interfaces).

¿Es posible usar qobject_cast() para convertir de una clase a una de las interfaces? Si obtengo todas las interfaces de QObject , QObject un error debido a las referencias ambiguas de QObject . Sin embargo, si solo tengo la clase base heredada de QObject , no puedo usar qobject_cast() porque eso opera con QObject s.

Me gustaría poder lanzar clases entre complementos y DLL a los que se refieren sus interfaces.