Las plantillas se pueden realizar usando encabezados de plantilla.
Let foo.h así:
#ifndef PREFIX
#define PREFIX
#endif
#define CCAT2(x, y) x ## y
#define CCAT(x, y) CCAT2(x, y)
#define FN(x) CCAT(PREFIX, x)
#ifndef T
#error Template argument missing.
#endif
void FN(foo)(int x, T t)
{
// Whatever.
}
#undef T
#undef PREFIX
#undef CCAT2
#undef CCAT
#undef FN
Para usarlo se puede hacer:
#define T char*
#define PREFIX pchar_
#include "foo.h"
#define T int
#define PREFIX int_
#include "foo.h"
Ahora usted tienen pchar_foo()
y int_foo()
que se puede utilizar.
Las ventajas de esto es que si hay un problema de compilación, obtiene el número de línea en el encabezado de la plantilla en lugar de que el compilador simplemente diga que la macro es incorrecta y la finalización del código también funciona en algunos IDE.
El PREFIX
, los CCAT
y FN
macros son muy comunes por lo extraje su definición en una cabecera separada, y su indefinición a otro.
Implementé partes del STL usando este patrón por diversión y lo uso en algunos de mis proyectos C.
A veces también puede usar macros para emular el comportamiento de la plantilla. – Lucas
En C++, no se utilizarían las plantillas para esa – Motti
sobrecarga de @Totti, ¿o no? – Amarghosh