Я пытаюсь написать вариационную функцию, которая принимает неизвестное количество аргументов и создает массив типа ввода (его функция шаблона, поэтому, если входные аргументы являются float, он возвращает float ptr и аналогично другим типам данных)Variadic Function Universal Sentinel Value
Я думал, что могу использовать либо NAN
, либо INFINITY
в качестве значения дозорного устройства, потому что один из них теоретически никогда не будет использоваться в массиве (по крайней мере, для моих целей).
Более или менее функция выглядит следующим образом
template<typename T>
T* arrayIt(T first, ...)
{
va_list ap;
va_start(ap, first);
T n = first, *array = (T*)malloc(sizeof(T));
int sz = 0;
while(!(isnan(n)) /* or infinite(n) */){
sz++; // inc array size
array = realloc(array, sizeof(T)*(sz+1)); // realloc
array[sz] = n;
n = va_arg(ap, T); // update temp
}
array[0] = sz; // store size of array
return (array + 1); //doing this places the first element at array[0]
// the size of the array is stored at array[-1]
}
Функция работает, как и планировалось со всем, кроме Интс. Я хотел бы знать, как использовать функцию таким образом, используя NAN
как дантинал. Я также хотел бы сделать это предпочтительно без макроса.
т.е. int * a = arrayIt<int>(1,2,3,4,5,6,NAN);
Я не знал, что это возможно. Я застрял в последнем выпуске C++ и не нашел времени, чтобы узнать новые вещи. Я попробую, когда у меня появится шанс! –
Это было именно то, что мне нужно! –