0

不明な数の引数を取り、入力型の配列を作成する可変引数関数を作成しようとしています (これはテンプレート関数であるため、入力引数が浮動小数点の場合、浮動小数点 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です。また、できればマクロなしでこれを行いたいと思います。

すなわちint * a = arrayIt<int>(1,2,3,4,5,6,NAN);

4

1 に答える 1