visual una studio librerias libreria dev crear como c++ header-only

c++ - studio - ¿Cómo creo una biblioteca de sólo encabezado?



crear dll en c# visual studio 2017 (4)

Además, creo que deberás evitar cualquier uso de variables globales o estáticas en tu código de biblioteca de solo encabezado.

Me gustaría empaquetar una biblioteca en la que estoy trabajando como una biblioteca de solo encabezado para facilitar el uso de los clientes. (Es pequeño y realmente no hay razón para ponerlo en una unidad de traducción por separado) Sin embargo, no puedo simplemente poner mi código en encabezados porque esto viola la regla de una definición de C ++. (Suponiendo que el encabezado de la biblioteca se incluya en varias unidades de traducción de un proyecto de cliente)

¿Cómo se modifica una biblioteca para que sea solo de encabezado?


Use los protectores de encabezado como sugiere Liz y no olvide poner "en línea" antes de sus métodos de función.

es decir

#ifndef MY_HEADER_H_ #define MY_HEADER_H_ inline RetType FunctionName( ParamType1 param1, ParamType2 param2 ) { // Function body return retType; } #endif


Utilice protectores de encabezado para las partes que se compilan en un solo lugar.


Puede utilizar la palabra clave en inline :

// header.hpp (included into multiple translation units) void foo_bad() {} // multiple definitions, one in every translation unit :( inline void foo_good() {} // ok :)

inline permite al enlazador simplemente elegir una definición y descartar el resto.

(¡Como tal, si esas definiciones no coinciden, obtienes una buena dosis de comportamiento indefinido ...!)

Como un aparte, las funciones miembro definidas dentro de un tipo de clase, están marcadas implícitamente en inline :

struct myclass { void i_am_inline_implicitly() { // because my definition is here } void but_i_am_not(); void neither_am_i(); }; inline void myclass::but_i_am_not() { // but that doesn''t mean my definition cannot be explicitly inline } void myclass::neither_am_i() { // but in this case, no inline for me :( }