初始化某种类型的数组,但任意大小

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

假设我有以下代码:

using Element = std::array<int, 2>;

constexpr auto arrayOfElement()
{
    return std::array
    {
        Element{ 1, 2 },
        Element{ 2, 3 },
        Element{ 123, 123 },
        Element{ 8008, 1337 }
    };
}

这编译得很好,但为了表明我所指的类型是返回数组的元素,我必须不断重复元素类型名称。另一种写法:

constexpr auto arrayOfElement2()
{
    return std::array<Element, 4>
    {
        Element{ 1, 2 },
        { 2, 3 },
        { 123, 123 },
        { 8008, 1337 }
    };
}

在这里,我不必像元素一样多次键入 Element,但在这种情况下,我无法推导出大小,并且必须键入第一个元素,这使得整个事情看起来有点尴尬,因为有一个边缘第一个元素的情况。

有没有一种方法可以让我只指定一次元素类型,同时还能推导出数组的大小(部分 CTAD)?

c++ arrays initialization aggregate-initialization ctad
1个回答
1
投票

由于如果不指定元素数量就无法指定元素类型,因此请使用

std::to_array
:

constexpr auto arrayOfElement() {
    return std::to_array<Element>({
        { 1, 2 },
        { 2, 3 },
        { 123, 123 },
        { 8008, 1337 }
    });
}
© www.soinside.com 2019 - 2024. All rights reserved.