tutorial textos sistema que poner etiquetado español ejemplos cursiva como c++ header-only

c++ - textos - ¿Cuándo debería considerar hacer un encabezado de biblioteca solo?



solidity tutorial español pdf (4)

Las bibliotecas de plantillas no necesitan ser solo de cabecera: las implementaciones pueden contener algunas piezas independientes de los parámetros de la plantilla, y por algunas razones (por ejemplo, menor tamaño de código) separadas en un binario especial.

No puedo imaginar un caso en el que una biblioteca sin plantilla realmente deba ser solo de encabezado. Sin embargo, a veces puede ser razonable en términos de rendimiento permitir la inclusión de todo el código. Un ejemplo puede ser una biblioteca de envoltorios alrededor de interfaces específicas de plataforma, por ejemplo, para elementos como primitivas de sincronización, almacenamiento local de subprocesos, implementación específica de plataforma y compilador de operaciones atómicas, etc.

Obviamente, las bibliotecas de plantillas deben ser solo de encabezado, pero para las que no son plantillas, ¿cuándo debería hacer cosas solo de encabezado?


Podrías seguir a Boost.Asio liderar.

Simplemente proporcionan las dos versiones de las bibliotecas: solo encabezado y encabezado + biblioteca.

Lo hacen con una sola macro para definir (o no) antes de incluir sus encabezados. Creo que el valor predeterminado (si no está definido) es usar la versión de solo encabezado.

Ver Compilación Separada Opcional .

Observe cómo proporcionan de manera ordenada un único archivo fuente para compilar que define todo o la opción de vincular a una biblioteca cargada dinámicamente.


Sin plantillas, tendrías definiciones reales en los encabezados. Eso significa que si dos archivos incluyen su encabezado, obtendría múltiples definiciones y el código no se compilará.

En otras palabras, poner definiciones en los encabezados es una muy mala idea. Debes ceñirte solo a las declaraciones y plantillas.

En cuanto a las plantillas, los compiladores saben que puede incluir el mismo encabezado más de una vez, no generarán el mismo código una y otra vez.

EDITAR: Si te refieres a "mantener todo en línea", creo que este es un enfoque muy malo. Los archivos de encabezado se vuelven completamente ilegibles y cualquier cambio en la implementación obliga a cualquier usuario de su biblioteca a compilar todo.


Si cree que su biblioteca sin plantillas podría ser solo de encabezado, considere dividirla en dos archivos de todos modos, luego proporcione un tercer archivo que incluya tanto el .h como el .cpp (con un protector de inclusión).

Entonces, cualquiera que use su biblioteca en un montón de TU diferentes y sospeche que esto puede costar mucho tiempo de compilación, puede hacer el cambio para probarlo fácilmente.

Una vez que sepa que los usuarios tienen la opción de utilizar la biblioteca, la respuesta probablemente se convierta en "ofrezca esa opción siempre que pueda". En cualquier momento, la inclusión de múltiples TU no violaría la ODR. Por ejemplo, si sus funciones libres no static refieren a static globales static , entonces no tendrá suerte, ya que las diferentes definiciones de esa función en diferentes TU se referirán a diferentes objetos con el mismo nombre, lo que es una violación de ODR.