¿Alguien tiene una buena explicación de qué es un "tipo opaco"? Vi ese término en el contexto de CFBundleRef
, donde decían: "CFBundleRef opaque type". ¿Es ese un tipo que es de solo lectura?¿Qué significa el término "tipo opaco" en el contexto de "tipo opaco CFBundleRef"?
Respuesta
Un "tipo opaco" es un tipo en el que no tiene una definición completa para struct
o class
. En C, C++ y Objective-C, puede indicar al compilador que un tipo se definirá más adelante mediante el uso de una declaración hacia adelante:
// forward declaration of struct in C, C++ and Objective-C
struct Foo;
// forward declaration of class in C++:
class Bar;
// forward declaration of class in Objective-C:
@class Baz;
El compilador no tiene suficiente información para permitirle hacer nada directamente con la struct
o class
excepto declarar punteros a ella, pero esto es con frecuencia todo lo que necesita hacer. Esto permite a los creadores de la biblioteca y el marco ocultar los detalles de la implementación. Los usuarios de una biblioteca o marco luego llaman a las funciones auxiliares para crear, manipular y destruir instancias de un struct
o class
delantero declarado. Por ejemplo, un creador marco podría crear estas funciones para struct Foo
:
struct Foo *createFoo(void);
void addNumberToFoo(struct Foo *foo, int number);
void destroyFoo(struct Foo *foo);
Como parte del marco de la Fundación Core, Apple hace que las clases comunes de Objective-C como NSString
, NSArray
y NSBundle
a disposición de los programadores de C a través de tipos opacos. Los programadores C usan punteros y funciones auxiliares para crear, manipular y destruir instancias de estas clases Objective-C. Apple llama a esto "puente sin cargo". Siguen una convención de nomenclatura común: prefijo "CF" + nombre de clase + "Ref" sufijo, donde "CF" significa "Fundación básica" y "Ref" es la abreviatura de "Referencia", lo que significa que es un puntero.
Un tipo opaco es un tipo que "envuelve" tipos de nivel inferior, y se usa a menudo cuando la implementación subyacente es compleja o el usuario simplemente no necesita saber sobre el funcionamiento interno. Apple tiene una buena página en los tipos opacos aquí:
Por ejemplo, CFString es un tipo opaco, ya que envuelve una matriz de caracteres, mantiene su longitud, su codificación, etc., pero no permite directamente la usuario para acceder a estos valores Más bien, proporciona métodos que acceden o manipulan campos internos y devuelven al usuario la información relevante.
Es una estructura futura declarada. Por ejemplo:
typedef struct CFBundle *CFBundleRef;
Sin la propia definición de "CFBundle estructura", su código no puede acceder a cualquier cosa dentro de un puntero CFBundleRef. Esto es opaco
- 1. ¿Qué es un valor opaco?
- 2. JPanel dice que es opaco, ¿qué significa eso?
- 3. ¿Qué define un tipo opaco en C, y cuándo son necesarios y/o útiles?
- 4. ¿Qué significa el término "restringido" en java?
- 5. c typedef (ed) puntero opaco
- 6. ¿Qué significa el término "BODMAS"?
- 7. elemento opaco en una transparente en WPF
- 8. CSS - Texto opaco en baja opacidad div?
- 9. Problemas al hacer un UIImageView opaco en el iPhone
- 10. ¿Qué significa el término "léxico" en C++?
- 11. Desactive el cambio de tamaño opaco del separador QMainWindow/QDockWidget
- 12. Devolver un objeto opaco a la persona que llama sin violar la seguridad de tipo
- 13. Firemonkey semitransparente Image3D a veces es opaco
- 14. ¿Qué significa el término "Verilog Synthesis"?
- 15. Heredoc: ¿qué significa realmente el término 'EOT'?
- 16. UIView: opaco vs. alfa versus opacidad
- 17. El término "cláusula" en el contexto de la programación
- 18. Antialiasing de texto en CALayer con fondo opaco
- 19. ¿Qué significa '#' en un parámetro de tipo?
- 20. ¿Qué significa el error Tipo irrelevante en Python?
- 21. ¿Qué significa el término "bloqueo" en la programación?
- 22. conversión de opaco pkcs7 p7m a smre separado
- 23. ¿Qué significa "Tipo recursivo obligado" en Genéricos?
- 24. ¿Qué hace el? significa después de un tipo?
- 25. El término "pajar" en el contexto de PHP
- 26. ¿Qué significa el término base de datos heredada?
- 27. ¿Qué significa "El tipo ArrayList no es genérico"?
- 28. ¿Qué significa el error "tipo incompleto no permitido"?
- 29. ¿Qué significa Contexto?
- 30. ¿Qué significa "Contexto" en "ServletContext"?
muy impresionante ¡buena respuesta! ¡¡Gracias!! – Thanks
una pregunta más sobre eso: ¿los creadores de los marcos proporcionan estas funciones auxiliares, o los crean los usuarios? – Thanks
Los creadores de framework los proporcionan. –