Pregunta

Estoy migrando poco de código C ++ a partir de estructuras de clases.

Yo estaba usando principalmente las estructuras de optimizaciones de campo de bits que no necesito más (estoy más preocupado por la velocidad que el ahorro de espacio que ahora).

  • ¿Cuáles son las directrices generales para realizar esta migración? Todavía estoy en la etapa de planificación, ya que es un gran movimiento que afecta a una parte importante del código. Quiero planificar todo lo primero antes de hacerlo. ¿Qué son todas las cosas esenciales que debería tener en cuenta?
¿Fue útil?

Solución

No se puede nombrar todos las cosas esenciales, pero puedo nombrar uno:. encapsulación

La única diferencia técnica en C ++ entre struct y la clase es el acceso predeterminado. En una estructura, todo es pública por defecto; en una clase, todo es privado. Estoy asumiendo que usted está hablando de POD estructuras aquí, donde todo es público.

Lo que quiero hacer es lo siguiente:

  1. Cambiar la palabra clave struct a class y ver dónde llamar descansos de código. Eso le daría una pista sobre qué partes del tipo se utilizan cuando.
  2. A partir de eso, determinar qué elementos del tipo debe ser pública, que debe ser privada.
  3. funciones de descriptor de acceso de escritura para las partes públicas y cambio de código de llamada a usarlos.
  4. Mueva el código que necesita tener acceso a las partes privadas en la propia clase.

Otros consejos

Cuando se actualiza una base de código legado de C a C ++, mi experiencia es que hay muy poco valor y enteramente demasiado esfuerzo involucrado en realidad rediseñar su aplicación a las estructuras tradicionales Convertir a objetos C ++. Debido a que no se equivoque, eso es lo que va a terminar haciendo. No va a parecer al principio, pero con el tiempo se dará cuenta de que está rediseñando la aplicación.

no dicen lo suficiente acerca de cuáles son sus objetivos, así que tal vez este es su objetivo, pero si sólo está tratando de convertir a C ++ tan nuevo código en su aplicación puede ser C ++, simplemente cambiar el nombre de los archivos, puede crear una montón de moldes, donde las conversiones implícitas de void * se producían antes, y seguir adelante con su vida.

No hay diferencia significativa entre las estructuras y las clases en C ++ (que difieren sólo por la visibilidad por defecto). No me molestaría a migrar a las estructuras de clases a menos que se va a añadir comportamientos significativos también.

Primera , que se unirá a los otros y decir que se mueve todo el código de las estructuras de clases puede no ser el mejor movimiento. Si tuviera que hacerlo bien (es decir, más que el cambio de struct X { con class X { public:) que mediante el rediseño de la aplicación (más o menos una reescritura completa).

Esto implica la introducción de nuevos errores, nuevos ciclos de desarrollo, pruebas adicionales, el cambio de la documentación y así sucesivamente.

Segundo , teniendo en cuenta que puede tener razones válidas para hacer esto (para mí "sólo por diversión" y "a ver si puedo hacerlo" puede haber razones válidas en algunas situaciones: D) aquí son mis respuestas a sus preguntas:

1. What are the general guidelines for doing this migration?
2. What are all the essential things I should keep in mind?

Las directrices y las cosas a tener en cuenta:

  • trabajo en muy pequeñas iteraciones , y asegúrese de que la aplicación es funcional entre iteraciones. Si tiene unidad de pruebas definidas, se puede trabajar su camino a través de ellos (elija una unidad, rediseñar seguir una serie de pasos (véase más adelante), a continuación, adaptar y ejecutar las pruebas.

  • elegir un área de su código y terminarlo .

  • tratar de seguir estos pasos para cada cambio:

    • analizar la funcionalidad y rediseñar
    • crear la nueva implementación en paralelo con la edad
    • interruptor en la nueva implementación de todo el mundo se utiliza el antiguo
    • prueba de que la aplicación aún funciona
    • eliminar el código antiguo
    • prueba de que la aplicación aún funciona
  • Si no lo está haciendo en el momento, empezar a utilizar un software de control de código fuente de ramificación . Nada menos que bastante corta. Recomiendo Mercurial, pero entiendo GIT tiene aproximadamente las mismas características. Usted puede agradecerme más adelante:. O)

  • Realizar cambios transaccionalmente (comenzar con un área y terminarlo, sin añadir cambios de otras áreas, mientras que los cambios para el primero de ellos están a mitad de camino a través). Si utiliza una fuente de control de ramificación y varios desarrolladores que puede tener uno / cambio de área por desarrollador en un momento, y luego centralizar los cambios.

Las ventajas de una metodología refactorización:

  • las estancias de aplicaciones funcionales si se deciden a mitad de camino a través de que el esfuerzo no vale la pena (o si la administración decide el esfuerzo no vale la pena)

  • la estabilidad de la aplicación sigue siendo manejable a través de los cambios

Si establecer algunos hitos esto debería ser bastante manejable.

Buena suerte!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top