2009-10-13 11 views
17

Estoy escribiendo un pequeño programa de C++ para divertirme y para ampliar mi habilidad en C++. Como su alcance es relativamente pequeño, también planeo probar el desarrollo multiplataforma haciendo que este programa sea compatible con Windows y Linux.Aprendizaje y desarrollo multiplataforma (C++)

Creo que mi dominio de C++ está ubicado en algún lugar entre el nivel casual e intermedio: OO, un poco de plantillas y patrones de diseño, antes usaba STL y trataba de verlo más detalladamente ... Sin embargo, al codificar este pequeño programa, me parece que cuanto más profundizo en C++, más dolor siento, especialmente cuando llego a entender y lidiar con las diferencias entre la implementación de diferentes plataformas/proveedores.

El uso de frameworks multiplataforma como Qt, ACE, Boost parece ayudar a acelerar el desarrollo mucho, así hace la vida más fácil, pero me preocupa si esto va a vencer a mi propósito. ¿Alguien puede dar algún consejo si hay alguna "mejor práctica" para hacer un desarrollo multiplataforma en C++? Gracias.

Respuesta

16

¿Alguien puede dar algún consejo si hay alguna "mejor práctica" para hacer el desarrollo multiplataforma en C++?

Hay tres cosas:

  1. escribir su propio código para que sea portátil

  2. abrigo de las API específicas de la plataforma detrás de una capa de abstracción/aislamiento/utilidad

  3. Elija bibliotecas multiplataforma

Puede elegir la opción n. ° 2 y/o n. ° 3.

Las ventajas de # 3 sobre # 2 tienden a ser cosas como, "Ya está escrito, depurado y admitido"; y las desventajas son como: "Tengo que aprenderlo, podría tener que pagarlo, no necesariamente puedo respaldarlo yo mismo, y puede que no haga exactamente lo que quiero".

Los desarrolladores suelen preferir la opción n. ° 3 en lugar de n. ° 2, especialmente si es una fuente abierta gratuita (que son las tres bibliotecas que citó).

2

A menos que esté haciendo cosas de GUI multiplataforma no es un gran problema.

Hay algunos pequeños problemas relacionados con los sistemas de archivos (diferentes/\ separadores, caracteres permitidos en los nombres de archivos, etc.), pero estos se encuentran en el nivel de aplicación en lugar de C++.

Hacer las aplicaciones más importantes se vuelve más complejo, necesita manejar la ayuda, las ubicaciones de archivos, posiblemente, la seguridad y la información del usuario de forma cruzada. Para la programación de tipo de algoritmo simple no hay problema.

Qt es principalmente una biblioteca de GUI, aunque tiene cosas extra de plataformas cruzadas. STL, Boost, ACE son plataformas cruzadas, pero ese no es el punto principal.

2

¡Úselas! Seriamente. La única razón por la que puede no querer utilizarlos es si planea trabajar en un entorno donde no están disponibles. Pero, dada su naturaleza multiplataforma, eso no es probable.

Descubrirá que el beneficio que obtiene de su uso es inmenso, incluso si no fuera multiplataforma. La "mejor práctica" de la que habla es poder entregar su "producto" de la manera más rápida y sencilla posible.

Una vez respondí una pregunta de alguien que afirmó que no quería usar bibliotecas de GUI en un nivel superior a Xlib. Si alguna vez hubiera usado Xlib, sabría el dolor que todos sentimos cuando nos vimos obligados a codificar a un nivel de abstracción tan bajo. Esto tiene tanto sentido como querer codificar en ensamblador porque C/C++? Python/Perl/everthting-else es simplemente una abstarction de nivel superior.

3

Usar gcc. Está disponible en Windows y Linux y las bibliotecas y la sintaxis del lenguaje son idénticas en ambas plataformas.

Para aplicaciones de GUI multiplataforma, Qt es una buena idea. No hay manera de evitar tener una dependencia en un marco de GUI si está tratando de lograr la independencia de la plataforma.

1

Creo que se puede aprender mucho utilizando bibliotecas ACE o equivalentes. aumentarán tu comprensión de C++ y patrones de diseño. Creo que esto es lo mejor que puedes hacer para mejorar tus habilidades de codificación.

1

Si está realmente interesado en hacer que su código sea lo más multiplataforma posible, use tantos compiladores como sea posible. Si usa Windows y Linux, use VC y gcc, como mínimo. Esto garantizará que no utilice funciones específicas de compilador y que no confíe en el comportamiento específico del sistema. Utilice más compiladores (Intel, IBM, etc.) y sistemas operativos (OS X, Solaris) si tiene acceso a ellos.

2

estas respuestas son realmente buenas y usted puede hacer una lista para encontrar dónde está el comienzo. pero creo que deberías leer algunos artículos sobre "porting application" .no relevantes con el desarrollo multiplataforma, pero esto puede darte una perspectiva muy amplia sobre el desarrollo multiplataforma. En multiplataforma en desarrollo, uno de los más cosa importación es problemas de memoria como (orden de bytes orden- bytes pueden mostrar diferencias para Tehnologies o plataformas) "endian"

2

uso impulso. ellos se encargan de cosas multiplataforma para ti.

boost::filesystem es un gran ejemplo

13

http://blog.backblaze.com/2008/12/15/10-rules-for-how-to-write-cross-platform-code/

debería proporcionar más detalles a las respuestas ya dadas.

También sugiero usar bibliotecas existentes que resumen la endianidad, los tamaños de datos y las diferencias. Se debe considerar lo siguiente antes de comenzar su proyecto multiplataforma.

GUI

  1. Qt
  2. XVT
  3. wxWidgets

General de Bibliotecas/marcos

  1. STL (Incorporated in most platform libraries already)
  2. Boost

desarrollo del juego

  1. SDL
  2. Cocos2d-x
Cuestiones relacionadas