Yo tampoco sé el nombre de los tres puntos, pero el tema va así:
Existe una librería de C (por lo que también está para C++) que se llama cstdarg. Esta es la que te permite pasar n parámetros. Cuando pasas un número indeterminado de parámetros, la función no sabe cuántos parámetros hay o de qué tipo son, además no sabe donde comienzan en memoria por lo que esas tres cosas se deberían indicar con un parámetro de la función. Por ejemplo, voy a hacer una función que acepte n parámetros y que haga la media aritmética:
#include <iostream>
#include <cstdarg>
// La función solo aceptará doubles, así que el tipo viene implícito en la función.
// La dirección de memoria de los parámetros la sabes gracias al último parámetro
// (el que hay antes de los ...). En este caso, num_elementos. Esto implica que al menos
// necesitar un parámetro en la función (en este caso, num_elementos).
double MediaAritmetica(int num_elementos, ...) {
va_list parametros;
double parametro_actual;
double media;
int i;
va_start(parametros, num_elementos); // Inicializamos 'parametros' usando el último parámetro.
for(i = 0; i < num_elementos; i++) {
parametro_actual = va_arg(parametros, double); // Obtenemos el siguiente parámetro, de tipo double.
media += parametro_actual;
}
media /= num_elementos;
va_end(parametros); // No sé muy bien por qué, pero esta línea es necesaria.
return media;
}
int main() {
double media;
media = MediaAritmetica(4, 3.2, 1.1, 4.3, 2.0);
std::cout << media << std::endl;
return 0;
}