valores termometro temperatura normales leer kelvin grados grado fahrenheit escalas escala definicion como centigrados celsius axilar c++ c plugins

c++ - termometro - grados celsius definicion



¿Por qué debería configurar una interfaz de complemento en c++ en lugar de c (4)

Aunque se trata más del "cómo" que del "por qué", es posible que le interese la (todavía) biblioteca Boost.Extension , así como el blog del autor sobre el tema.

Para la parte "por qué", mis 2 (canadienses) centavos: depende de la audiencia (los escritores de los complementos) y de la riqueza de la interfaz entre su aplicación y sus complementos:

  • Si la audiencia es grande o heterogénea, las limitaciones de un sistema de complementos de C ++ (mantener el complemento y la aplicación sincronizados con respecto a las versiones de compilador y biblioteca) no son prácticas, y la interfaz C es más fácil de mantener. Si la audiencia es pequeña, homogénea o está bajo su control, estos problemas no son tan significativos.
  • Si la interfaz es rica (agitando manualmente el significado preciso de "rico"), una interfaz C puede ser engorrosa para escribir, y la balanza se inclina en el lado C ++.

Sin embargo, el primer criterio (la audiencia) es más importante, y una interfaz C ++ tiene sentido solo si la audiencia es homogénea y la interfaz se beneficia significativamente de las ganancias de expresividad.

Como resultado de mis preguntas anteriores , me pregunté: ¿es útil configurar una interfaz C ++ para un sistema de complementos? Los siguientes puntos están en contra de eso:

  • No hay ABI común entre los diferentes compiladores y sus versiones, no hay un diseño común de los objetos en la memoria
  • Sin exportación de clase directa. Tienes que exportar fábricas y destructores. Surgen problemas si sus objetos son retenidos por otros objetos que solo los delete , por ejemplo, punteros inteligentes.
  • Diferentes implementaciones de STL, no se puede pasar una std::list<T> al plugin
  • Diferentes versiones de bibliotecas usadas como Boost

Si se limita a las partes restantes del lenguaje C ++ casi termina con el "subconjunto C". ¿Hay algún punto hablando por usar C ++? ¿Cómo resuelve Qt-Toolkit los problemas mencionados?

Observación: me refiero principalmente al sistema Linux. Sin embargo, estoy interesado en soluciones en otras plataformas.

Pregunta adicional: ¿Cuáles son los problemas al usar una interfaz C? El diseño de memoria de struct s? ¿Qué partes del lenguaje de C deberían evitarse?


Creo que estás respondiendo tu propia pregunta allí. No hay nada que te impida implementar una sencilla interfaz de complemento C y permitir a los escritores de plugins implementar su plugin con C ++. Solo intenta y aprende de los errores cometidos por la API de Netscape Plugin ...


En general, es una buena idea escribir interfaces con algún estándar de interfaz con el que se pueda contar. Es por eso que casi todos los sistemas operativos proporcionan dicha interfaz. En la mayoría de los Unix, los compiladores de C utilizan la misma convención que el sistema operativo, por lo que lo llaman la convención de llamadas de C. Windows ha llamado para este propósito.

Si intenta utilizar alguna interfaz de llamada interna del compilador, como C ++, entonces será víctima de todos los problemas que mencionó. Incluso las actualizaciones del compilador pueden manguerarte.


Una vez hice en C ++ la interfaz del complemento para un sistema que desarrollé y fue un gran error. Factible, pero no práctico en absoluto. Hoy, siempre haré la interfaz puramente en C, y tan simple como pueda. Los beneficios de estas elecciones son realmente significativos. Y si sus escritores de plugins quieren una API de C ++, simplemente puede escribir un contenedor de C ++ que llame a la interfaz de C.

Como una ventaja adicional, si los escritores de plugins quieren una API en cualquier otro idioma, una API C siempre será más fácil de crear.