我想为一个类创建一个构造函数,该类包含 3 个 T 类型的成员,该构造函数接收 T 类型的数组并将前 3 个值分配为成员 但是,我还想确保数组至少有 3 个成员长 构造函数语法必须如下:
A<T> triplet(T array[])
如何在不传递额外参数的情况下确保数组具有 3 个或更多值?
我尝试计算函数中的数组大小,但因为它是作为参数传递的,所以
sizeof(array)
是sizeof(T*)
,这是行不通的。
这个函数签名是不可能的。在数组衰减为指针后,您无法提取数组的大小(并且
A triplet(T array[])
与 A triplet(T* array)
完全相同)。
您可以通过引用接受数组,并且包含长度:
template <std::size_t N>
A triplet(T(&array)[N])
{
static_assert(N >= 3, "Array must have at least 3 elements");
// ...
return {};
}