c++ - publicos - importancia del espacio publico pdf
¿Hace alguna diferencia, usar espacios públicos en lugar de espacios privados en Qt? (3)
@ user2448027 la respuesta es correcta, pero debido a que falta un punto en el patrón de diseño de Qt y las diferentes aplicaciones de private slots vs.
públicas` no se menciona en ningún otro lado, decidí responder a este viejo tema: Al hacer las ranuras privadas, fuerza el usuario del objeto para usar la función de conexión para llamar a la ranura no directamente. o -> operador
Imagina un caso en el que hayas implementado un código lento o de bloqueo en una de las ranuras de tu clase y esperas que el usuario de la clase mueva el objeto creado a una hebra, por lo que la clase propietaria de este objeto (que podría ser GUI o alguna objeto relacionado con la GUI) no se congelaría o bloquearía al llamar a este espacio. Aquí está el punto que si la llamada a la ranura hecha directamente mediante el uso .
o ->
operadores, bloqueará. Debido a que el hilo actual del método de llamada usará la ranura, y esto sucederá solo si ha utilizado espacios públicos. La solución es hacer que la ranura sea privada, por lo que el uso solo podría llamarla a través de la conexión, no directamente.
Conclusión:
- Si tiene espacios de bloqueo, asegúrese de implementarlos como espacios privados.
- si las ranuras se usan como configuraciones simples de propiedad para el objeto, conviértanlas en espacios públicos
- finalmente, si necesitas algunos métodos con valores de retorno o argumentos de referencia inconstantes, ni siquiera los conviertes en tragamonedas (no tiene sentido), solo lo público es suficiente
En C ++, public
significa aquellos miembros a los que se puede acceder desde cualquier lugar donde el objeto sea visible, private
significa que los miembros son accesibles solo desde otros miembros de la misma clase o desde sus amigos.
Pero en Qt, la diferencia en private slots
y public slots
parece no existir. Empecé a escribir Qt en los últimos días, y utilicé private slots
todo el tiempo.
Alguien me dijo que debería usar public slots
. Así que ahora estoy desconcertado. No puedo encontrar información de referencia en los documentos de Qt.
¿Cuál es la diferencia real entre los dos tipos?
De Qt Documentation :
Como los slots son funciones miembro normales, siguen las reglas normales de C ++ cuando se llaman directamente. Sin embargo, como tragamonedas, pueden ser invocados por cualquier componente, independientemente de su nivel de acceso, a través de una conexión de ranura de señal. Esto significa que una señal emitida desde una instancia de una clase arbitraria puede provocar que se invoca una ranura privada en una instancia de una clase no relacionada.
Lo que esto significa: desde otra clase, no puede llamar a una ranura privada como una función, pero si emite una señal conectada a esa ranura privada, puede invocarla.
El compilador verifica el acceso público / privado en tiempo de compilación, pero la conexión de la ranura de señal se realiza en tiempo de ejecución y algunos mecanismos de QMetaObject invoca ranuras (algo así como por ejemplo invokeMethod ).
La diferencia es la siguiente: las máquinas tragamonedas privadas son privadas si se llaman como funciones regulares pero siempre son " públicas " para que las señales se invoquen, una buena razón es porque las tragamonedas son conceptualmente una interfaz pública, ya que su propósito principal es la comunicación entre objetos.
Otro ejemplo de algunas cosas "extrañas" relacionadas es la llamada de funciones virtuales privadas si son públicas en el tipo estático del puntero que se usa para llamar al método.