gpt4 book ai didi

c++ - 可变函数通用哨兵值

转载 作者:行者123 更新时间:2023-11-28 00:42:23 30 4
gpt4 key购买 nike

我正在尝试编写一个可变参数函数,它接受未知数量的参数并创建一个输入类型的数组(它是一个模板函数,所以如果输入参数是 float ,它返回一个 float 指针,对于其他数据类型也是如此)

我在想我可以使用 NANINFINITY作为标记值,​​因为理论上它们中的一个永远不会在数组中使用(至少对我来说是这样)。

这个函数大概是这样的

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++11 中,您可以这样做:

template <typename T, typename... Vals>
std::array<T, sizeof...(Vals)> arrayIt(Vals... vals) {
return std::array<T, sizeof...(Vals)>{static_cast<T>(vals)... };
}

在没有哨兵的情况下使用,例如:

auto a = arrayIt<int>(1, 2, 3, 4, 5, 6);

关于c++ - 可变函数通用哨兵值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18139636/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com