Como puedo hacer esto?
class Acumulador {
template<class T> Acumulador& operator+(Acumulador& c, T& v)
{
// hago algo
return c;
}
template<class T, int N> Acumulador& operator+(Acumulador& c, T[N]& a)
{
for(int i=0;i<N; ++i) c += a[i];
return c;
}
};
Como hago para decirle a una función que me acepte un array de cualquier tipo y de cualquier tamaño?
Obviamente ese codigo no me compila, he probado varias cosas (clases intermedias y demas, pero naranja)
Saludos
Jurl... eso de usar arrays de tamaño fijo como parametro nunca me ha molado.
Qué problema hay en pasar un std::vector ?
Nínguno, pero quiero y necesito que me tome arrays también.
No es lo mismo que una referencia a un puntero? no entiendo bien la pregunta
Siguiendo el codigo de arriba, lo que quiero al final poder hacer es esto:
Acumulador c;
int arreglo[10];
c += arreglo;
Puedo hacer una función especial y pasarle el tamaño tambien y con un pequeño macro tengo resuelto el pescado, pero pierdo la sintaxys.
#define ADD_ARRAY(C, A) c.Add( A, sizeof(A) / sizeof(A[0]) )
Lo que busco es una solución automatica como la que hace boost en su serialización, pero lamentablemente la ingenieria inversa no me funcionó.
Para que la función acepte arrays y no punteros:
template <class T, int N>
bar& foo(T (&a)[N])
{
// ...
}
Citarerror C2265: '<Unknown>' : reference to a zero-sized array is illegal
Pero igual gracias ese era mi error.
Rescrito bien:
template<class T, int N> Acumulador& operator+(Acumulador& c, T a[N])
{
for(int i=0;i<N; ++i) c += a[i];
return c;
}
Lo cual me compila perfectamente. No se por que me habia tarado con el "T[N] a" en vez del "T a[N]"
Igual no anda por que no puede deducir el parametro :( ... sigo investigando
int a[10];
c + a;
Gracias!
http://www.codeguru.com/forum/showthread.php?t=350155&page=1&pp=15
http://www.velocityreviews.com/forums/t279736-p2-template-deduction-of-array-size.html
Entonces el problema es el compilador mio :(
Buscaré si hay alguna forma de arreglarlo.