Estamos en el proceso de diseñar una nueva biblioteca de C++ y decidimos utilizar un enfoque basado en plantillas junto con algunas especializaciones de plantillas parciales específicas para casos de esquina. En particular, esta será una biblioteca de plantillas de solo encabezado .¿Compila la biblioteca de plantillas solo de encabezado en una biblioteca compartida?
Ahora, existe la preocupación de que esto conducirá a una gran cantidad de duplicación de código en los binarios, ya que esta plantilla 'biblioteca' se compila en cualquier otra biblioteca compartida o ejecutable que lo utiliza (podría decirse que sólo aquellas partes que se usan). Todavía creo que esto no es un problema (en particular, el compilador incluso podría alinear cosas que no podría en los límites compartidos de la biblioteca).
Sin embargo, dado que conocemos el conjunto finito de tipos para el que se va a utilizar, ¿hay alguna forma de compilar este encabezado en una biblioteca y proporcionar un encabezado diferente con solo las declaraciones y nada más? Tenga en cuenta que la biblioteca debe contener no solo las implementaciones genéricas, sino también las especializaciones parciales ..
¿Te refieres a "finito" o "acotado"? Obviamente, cualquier cosa que hagas en una computadora, o en este universo, va a ser finita, por lo que la distinción es crucial. –
Quise decir limitado: necesitaremos instancias de estas plantillas para unos 8 tipos y nada más. Entonces podríamos escribir fácilmente una lista. – lytenyn
Hmm, no estoy del todo seguro, y seguramente tendrá que enviar los encabezados reales, pero podría agregar instancias explícitas para esos tipos a un archivo fuente y compilar eso y declarar esas plantillas 'extern' en cualquier otro lugar. Nunca lo intenté, pero creo que se supone que tiene el efecto deseado. –