Quiero hacer una aplicación de iPhone, pero estoy planeando hacer el framework en C++. ¿Es posible usar cosas como plantillas en Objective-C++? Creo que realmente la pregunta es, ¿puedo usar boost?Cuánto de C++ es compatible con Objective-C++
Respuesta
Todo C++ es compatible con Objective C++. Debería ser posible usar boost, pero es posible que tenga que portar algunas de las cosas dependientes de la plataforma.
He usado boost sin ninguna modificación. Funcionó directamente de la caja. –
Las principales bibliotecas impulsoras deberían funcionar, pero algunas de las bibliotecas relacionadas con IO probablemente no funcionarán de la caja. – Zifre
Zifre: Es cierto que necesitas trabajar con eso. –
Objetivo C++ es un superconjunto de C++. Todo lo que puede hacer en C/C++ se puede hacer en Obj-C++. La porción "Objetivo" contiene, entre otras cosas, un sistema de mensajes Smalltalk-esque y otras adiciones a C++.
Debe señalarse que no puede hacer todo lo que puede hacer en C++ en Objective-C++. Por ejemplo, no puede invocar funciones virtuales en objetos C++ desde una clase Objective-C. Una vez que llame a una función C/C++ puede hacer lo que quiera.
No creo que esto sea correcto. Puede llamar a los métodos virtuales de C++ desde el código Objective-C++. –
http://tinyurl.com/yfrxwg9 indica que: "Objective-C++ intenta de manera similar permitir que las instancias de clase C++ funcionen como variables de instancia. Esto es posible siempre que la clase C++ en cuestión (junto con todas sus superclases) no tiene definidas funciones miembro virtuales. Si hay funciones de miembros virtuales presentes, la clase C++ puede no servir como una variable de instancia Objective-C. Parece en las versiones más nuevas del sistema operativo que esto no es un problema, pero creo que está en el sistema operativo iPHONE. –
Los objetos C++ en Objective C NO necesariamente se comportarán como en C++. Por ejemplo, los constructores y destructores no se invocan automáticamente y (creo) que no se pueden implementar métodos virtuales ...
Es posible usar cosas como plantillas en Objective-C++.
Sí, pero debe tener cuidado de cómo se mezclan tipos e interfaces entre las capas C++ puras y el código Objective-C++. Tenga en cuenta los límites entre capas, donde deberá convertir tipos como std::string
a NSString
, y así sucesivamente.
Por ejemplo, podría implementar el motor del juego principal en C++ puro, e implementar simplemente sus controladores y código de GUI en Objective-C++. Entonces el código Obj-C++ es el pegamento entre el motor C++ puro y el Cocoa.
Creo que realmente la pregunta es, ¿puedo usar boost?
Dado el iPhone OS es un subconjunto de OS X que todavía proporciona una capa POSIX completa, la mayoría de las bibliotecas Boost debería funcionar bien. Debería ser exactamente como escribir el código de Darwin.
Hay una serie de limitaciones en Objective-C++ para estar al tanto de (tomado directamente de la Objective-C 2.0 Reference Guide):
- no se puede utilizar la sintaxis de Objective-C para llamar a un objeto de C++
- no se puede añadir constructores o destructores para un objeto Objective-C
- no puede usar las palabras clave this y de manera intercambiable
- las jerarquías de clase son independientes; una clase C++ no puede heredar de una clase Objective-C, y una clase Objective-C no puede heredar de una clase C++
- una excepción lanzada en código Objective-C no se puede capturar en código C++ y, a la inversa, una excepción lanzada en C++ el código no puede ser atrapado en el código Objective-C.
Si vas a rechazar una respuesta, lo menos que puedes hacer es explicar por qué. La respuesta aceptada (actualmente con 9 votos) expone de manera bastante simplista que todas las características de C++ están disponibles. Esta respuesta dice que sí calificado, y cita directamente de la referencia del lenguaje explicando las limitaciones, y se degrada. ¿Cómo funciona? – gavinb
Limitación # 2 escuchado como método general de C++ se puede agregar a la clase Objective-C. Pero es difícil creer que sea posible agregar el método C++ a la clase Objective-C. ¿Puedes explicar más sobre esto? Debido a que el enlace está roto, no puedo verificarlo más. – Eonil
Desafortunadamente no puedo encontrar un documento equivalente para reemplazar lo anterior. He enviado una nota al equipo de documentación de ADC solicitando que se restaure. El punto 2 simplemente significa que una clase ObjC en un módulo '.mm' todavía tiene los mismos métodos' init' y 'dealloc' para la administración del ciclo de vida; simplemente no puede mezclar enfoques ObjC y C++ dentro de la misma clase. No puede agregar un método de C++ a la clase ObjC, pero puede llamar entre los dos dentro de un .'mm'. Espero que esto aclare lo anterior. – gavinb
Boost es útil pero también es una gran sobrecarga para agregar a un proyecto.
Asegúrese de que realmente lo necesita antes de agregarlo.
Para compatibilidad con Regex: RegexLite.
Para todo lo demás: Cocoa.
- 1. ¿ASP.NET es compatible con C++?
- 2. Es nuevo C++ compatible con versiones anteriores
- 3. ¿Es compatible con declarative_authorization?
- 4. ¿C99 es compatible con C89?
- 5. serialización compatible con PHP de C/C++
- 6. ¿Boost.Tuple es compatible con las plantillas variadic de C++ 0x?
- 7. Uso de librerías estáticas C/C++ desde iPhone Aplicaciones ObjectiveC
- 8. ¿AutoMapper es compatible con Linq?
- 9. ¿lwIP es compatible con Zeroconf?
- 10. ¿OpenRasta es compatible con Mono?
- 11. ¿Es ChoiceMode compatible con ExpandableListView?
- 12. ¿Mono es compatible con XAML?
- 13. ¿Lua es compatible con Unicode?
- 14. ¿Cocos2d es compatible con ARC?
- 15. ¿GWT es compatible con php?
- 16. ¿MinGW es compatible con MFC?
- 17. ¿LevelDB es compatible con Java?
- 18. Cuánto javascript es demasiado
- 19. ¿DirectX 11 es compatible con .NET?
- 20. ¿TestNG es compatible con @Rule de JUnit4?
- 21. ¿SQLAlchemy es compatible con "tablas de cierre"?
- 22. ¿Cuánto de STL es demasiado?
- 23. ¿qué significa "compatible con el diseño C"?
- 24. Bloques ObjectiveC equivalente en Java
- 25. ¿cuánto se puede bloquear c?
- 26. clase enumerable C# - compatible con VBA
- 27. ¿Cuánto JSON es demasiado JSON?
- 28. SQLite en C y compatible con REGEXP
- 29. ¿Por qué C++ es compatible con C? ¿Por qué no hay algún lenguaje C++ "puro"?
- 30. ¿Xcode 4.3 es compatible con distcc?
Esto puede no ser tan útil como respuesta, pero si ya conoces C++, elegir Objective-C debería ser pan comido. A menos que, por supuesto, estés portando una aplicación, entiendo más la pregunta. – Sean
Puede tener sentido usar C++ cuando necesite un rendimiento muy alto, como en un motor de juego. –