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.