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

如何创建包含不同实例化Item类对象的Array模板类?

实现包含Item<1>到Item的Array类模板

要实现需求中Array<n>包含Item<1>至Item<n>对象的功能,核心思路是通过类模板全特化定义递归终止的空类,再配合主模板的递归结构完成成员组合。

1. 定义递归终止的特化版本

首先为Array<0>编写全特化代码,将其定义为空类,作为递归展开的终点:

template <>
class Array<0> {};

2. 编写主模板的递归逻辑

主模板中包含当前序号的Item<n>对象,以及承载前n-1个Item的Array<n-1>对象,递归展开后自然会包含Item<1>到Item<n>的所有成员:

template <int n>
class Array
{
public:
    Item<n> current_item;
    Array<n-1> prev_items;
};

完整代码示例

结合你给出的Item类实现,完整代码如下:

// 定义Item类模板
template <int n>
class Item
{
    int numbers[n];
};

// 递归终止:Array<0>为空类
template <>
class Array<0> {};

// 主模板递归定义
template <int n>
class Array
{
public:
    Item<n> current_item;
    Array<n-1> prev_items;
};

使用说明

当你实例化Array<3>时,其结构会展开为:

  • current_item:Item<3>对象
  • prev_items:Array<2>对象,包含Item<2>和Array<1>
  • Array<1>包含Item<1>和Array<0>(空类,无额外空间开销)

借助C++的空基类优化(EBO),Array<0>作为空成员不会占用额外内存,最终Array<n>的大小等于所有Item<1>到Item<n>的大小之和,无冗余开销。

内容的提问来源于stack exchange,提问作者那温度

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 02:38:32