No puedes pasar como parámetro un tipo de dato a una función. Tienes que pasar un dato, que será de un tipo determinado. Te indico un par de modos de "hacerlo" en C (pero pasando dos parámetros):
1.- Pasa la dirección de tu dato mediante un puntero void y un indicador del tipo de dato que estás pasando. Por ejemplo:
Código C:
Ver original#define VAL_ENTERO 1
#define VAL_DOUBLE 2
void AddService(void *ptr, int tipo);
int n;
double x;
...
AddService((void *)n, VAL_ENTERO)
AddService((void *)x, VAL_DOUBLE)
...
void AddService(void *ptr, int tipo)
{
switch (tipo)
{
case VAL_ENTERO:
...
break;
case VAL_DOUBLE:
...
break;
}
}
2.- Mediante una unión (por referencia o valor) y un indicador del tipo de dato:
Código C:
Ver original#define VAL_ENTERO 1
#define VAL_DOUBLE 2
typedef union
{
int valInt;
double valDbl;
}
TipoMiDato;
void AddService(TipoMiDato Dato, int tipo);
...
TipoMiDato MiDato;
...
MiDato.valInt = 7;
AddService(MiDato, VAL_ENTERO)
...
MiDato.valDbl = 1.333;
AddService(MiDato, VAL_DOUBLE)
...
void AddService(TipoMiDato Dato, int tipo)
{
int n;
double x;
switch (tipo)
{
case VAL_ENTERO:
n = Dato.valInt;
...
break;
case VAL_DOUBLE:
x = Dato.valDbl;
break;
}
}
No creo que sea difícil aplicar algo parecido en C++ (mis conocimientos de C++ son, de momento, muy básicos).
Saludos,
Edito: Después de escribir esto veo tu respuesta, en la que veo que la función AddService toma dos parámetros, y aparentemente la idea no es muy diferente de lo que te he posteado.