You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何指定std::array元素类型同时推导数组大小(部分CTAD)

实现仅指定一次元素类型并推导std::array大小的方法

C++20 解决方案:使用std::to_array

C++20引入的std::to_array刚好匹配需求:只需指定一次Element类型,编译器会自动推导数组大小,初始化列表里的元素也不用重复显式声明类型。

示例代码:

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

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

这里std::to_array<Element>明确了数组的元素类型,括号内的聚合初始化列表直接构造每个Element实例,数组大小由初始化元素的数量自动推导。

C++17 及更早版本:自定义辅助函数

如果需要兼容C++17或更早版本,可以自己实现一个简单的模板辅助函数,达到同样效果:

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

template<typename T, typename... Args>
constexpr auto make_array_of(Args&&... args) -> std::array<T, sizeof...(Args)>
{
    return {std::forward<Args>(args)...};
}

constexpr auto arrayOfElement()
{
    return make_array_of<Element>(
        {1, 2},
        {2, 3},
        {123, 123},
        {8008, 1337}
    );
}

这个make_array_of模板函数接受明确的元素类型T(传入Element)和任意数量的初始化参数,返回对应大小的std::array<T, N>,其中N由参数个数sizeof...(Args)推导得出。初始化时同样可以直接用聚合语法,无需重复写Element。

内容的提问来源于stack exchange,提问作者Andreas Loanjoe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 10:02:36