我正在尝试编写一个可变参数函数,它接受未知数量的参数并创建一个输入类型的数组(它是一个模板函数,所以如果输入参数是浮点数,它返回一个浮点 ptr,同样适用于其他数据类型)
我在想我可以使用其中一个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]
}
该函数按计划工作,除了 int 之外的所有内容。我想知道如何以这种方式使用该功能NAN
作为哨兵。我也想在没有宏的情况下这样做。
IEint * a = arrayIt<int>(1,2,3,4,5,6,NAN);