c++ - 只返回非类型参数
问题描述
我刚刚通过模板学习了使用非类型参数的编译时数组声明。因此,在这种方法中,我们传递常量并声明具有大小的数组。喜欢
#include<iostream>
using namespace std;
template<int size_of_array>
class arr
{
public:
int arr[size_of_array];
int size_of() { return size_of_array; }
};
int main()
{
arr<4> arr1;
cout << arr1.size_of();
return 0;
}
我们是否可以在运行时执行变量赋值之类的操作,例如arr[]
从那里移除。喜欢
#include<iostream>
using namespace std;
template<int size_of_array>
class arr
{
public:
int size_of_array;
int size_of() { return size_of_array; }
};
int main()
{
arr<4> arr1;
cout << arr1.size_of();
return 0;
}
我们可以这样做吗?或者为什么不呢?那么也许有一些我不知道的关于数组和变量声明的事情。先感谢您。
解决方案
绝对地!您可以通过编写一个函数来传递模板参数来公开模板参数。
您的尝试失败只是因为:
- 您尝试将模板参数名称重新用于数据成员名称,并且
- 您从未真正为数据成员分配值。
无论如何,这里实际上不需要额外的数据成员,因为模板参数可以在整个类定义中访问。
因此,对于像您这样的非类型模板参数,只需:
template <int size_of_array>
class arr
{
public:
static int size_of() { return size_of_array; }
};
现在arr<42>::size_of()
是42岁!
(我做到了static
,不是因为你需要,而是因为在这个例子中它是有意义的;你也可以让它成为一个非但static
成员const
函数。)
对于一个类型:
template <typename T>
class arr
{
public:
using array_size_t = T;
};
现在arr<T>::array_size_t
是类型T
!
推荐阅读
- javascript - 使用 webgl 调用 p5.js 的 createcanvas 方法时出错
- javascript - digitalocean上的javascript当前时间
- google-apps-script - getRange 问题,Google Apps 表格脚本
- gatsby - 使用 .JSON 文件创建博客文章管理器
- java - Java 函数然后签名解释
- perl - 调用 require_ok '*.pl' 以通过 Test::More 进行测试时如何传递参数
- html - 定义布局时,液体变量停止工作
- r - 在 R 中获取 (web) url 以获取帮助文档?
- javascript - 打印没有预览的表格
- ssh - 通过 cmd 将文件传输到远程