mmm yo no usaria define para estas cosas. Te estas complicando mucho...Empeza a usar funciones. Porque por ejemplo la funcion redim simplemente hace un new...pero nunca libera el objeto anterior. Si usas esto en un gran proyecto estarias desperdiciendo mucha memoria.
Mira ese ejemplo...
Código C++:
Ver originaltemplate <typename T>
T * redim (T *array, size_t new_size)
{
T *temp = new T[new_size];
delete [] array;
return temp;
}