如何将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
相关产品推荐
相关产品推荐

