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

如何将C++模板参数推入数组并返回对应int数组指针?

如何将模板参数推入数组?

我希望实现如下函数,使其返回由模板参数中int值组成的数组。

template <int... args>
int* data(... args)
{
    int* m_data = // push template args to array
}

你原代码的函数参数列表中的... args是冗余的,模板参数列表里已经声明了可变int参数包args,不需要再在函数参数中重复声明。下面给出两种常用实现方案:

方案1:返回std::array(最推荐,无内存泄漏风险,编译期构造零开销)

#include <array>

// C++14及以上可加constexpr实现编译期计算
template <int... args>
constexpr std::array<int, sizeof...(args)> data()
{
    // 直接展开参数包到初始化列表中
    return {args...};
}

使用示例:

// arr的类型为std::array<int, 4>,存储值为1、2、3、4
auto arr = data<1, 2, 3, 4>();
// 直接通过下标访问
int val = arr[0]; // val = 1

方案2:返回裸指针(不推荐,需手动释放内存)

如果你必须返回裸指针,实现如下,注意用完返回的指针后必须调用delete[]释放,否则会出现内存泄漏:

template <int... args>
int* data()
{
    // 动态分配数组同时用参数包展开初始化
    int* m_data = new int[sizeof...(args)]{args...};
    return m_data;
}

使用示例:

int* arr = data<1,2,3,4>();
// 使用数组
// ...
// 用完必须释放
delete[] arr;

内容的提问来源于stack exchange,提问作者Sobhy Rzk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:27:06