如何使用 C++ 中的模板控制传递给函数的数组的最小长度?

问题描述 投票:0回答:1

我想为一个类创建一个构造函数,该类包含 3 个 T 类型的成员,该构造函数接收 T 类型的数组并将前 3 个值分配为成员 但是,我还想确保数组至少有 3 个成员长 构造函数语法必须如下:

A<T> triplet(T array[])
如何在不传递额外参数的情况下确保数组具有 3 个或更多值?

我尝试计算函数中的数组大小,但因为它是作为参数传递的,所以

sizeof(array)
sizeof(T*)
,这是行不通的。

c++ arrays function templates
1个回答
0
投票

这个函数签名是不可能的。在数组衰减为指针后,您无法提取数组的大小(并且

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 {};
}
© www.soinside.com 2019 - 2024. All rights reserved.