繁体   English   中英

在自定义模板化数组 class 上定义数组的大小

[英]Defining the size of an array on a custom templated Array class

我正在做一个项目,从头开始编写几个数据结构、过程,可能是一个小型测试框架......已经众所周知和编码的东西,但只是为了学习和获得更深入的编程基础知识,但以现代方式,或者至少使用C++语言的现代工具。

所以,有代码的回购协议。 那里提供的代码目前在 Unix 系统下工作,其中clang >= 14 此外,repo 包含一个名为Zork的工具,这是一个自定义 C++ 项目构建器,专注于构建具有C++20 modules功能的 C++ 项目。 在项目的根文件夹中,你会发现一个zork++文件,这是执行该工具的编译二进制文件。 因此,仅使用./zork++该工具将编译和链接项目。 这是一个作为超基本测试工具的入口点,它只是main.cpp文件调用的东西和测试它的功能。

有一个zork.conf文件,这是一个配置文件,用于设置将被发送到编译器以自动化项目的命令。

这个剧透是为了提供问题背后的真实代码。 我打算为这个项目提出几个关于 Stack Overflow 的问题,所以这个问题被设置为通常需要的“代码示例”的基本解释。

在此之后,让我们 go 回答真正的问题。

我开始制作 collections。定制的。 所以,对我来说,最基本的(事情应该是最简单的,然后按照难度升序编码到最难的)是模拟 C++ 数组 class。

这是片段:

export namespace zero::collections {
    template <typename T, unsigned long>
    class Array {
        private:
            T array[];
    };
}

第一个疑问是模板化的class的第二个参数。第二个参数必须提供数组成员所需的初始容量。 我只是选择 long 因为它足够长来存储任何带符号的数字(我想这太多了......)。 我不知道 C++ 中定义此参数的正式方式对实现具有实际意义。

一个简单的 int 将适合大多数常见情况。 但我想让它完全通用。 我想用一个概念来约束它。 这个想法是参数,必须是一个未签名的自然数。 但不是具体的short,int或者long。 例如,像number这样的东西。 但我想不出编写需求代码的最佳方式。

在现代 C++ 中定义此要求的正式方法是什么,并使用该模板参数以 const 初始化具有固定大小的数组?

您正在寻找std::size_t ,它可以在某些系统头文件中找到。 从 cppreference 中提取:

  • 在 header cstddef中定义
  • 定义在 header cstdio
  • 在 header cstdlib中定义
  • 定义在 header cstring
  • 定义在 header ctime
  • 定义在 header cuchar
  • 定义于 header cwchar (C++17 起)

基本上,您应该包括其中之一,并使用std::size_t作为模板参数,该参数必须定义用户想要存储在数组中的元素数量。

export module your_module;

#include <cstddef>

export namespace zero::collections {
    template <typename T, std::size_t N>
    class Array {
        private:
            T array[N];
    };
}

另请注意,您必须使用类型参数N定义数组成员的大小。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM