[英]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 中提取:
cstddef
中定义cstdio
cstdlib
中定义cstring
ctime
cuchar
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.