我刚刚通过模板使用 non-type 参数学习了编译时数组声明。因此,在这种方法中,我们传递常量,并声明具有大小的数组。 喜欢
#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;
}
我们能做到吗?还是为什么不呢?然后也许有一些我不知道的关于数组和变量声明的东西。预先谢谢你。
答案 0 :(得分:3)
绝对!您可以通过编写一个函数来传递模板参数。
您的尝试仅因以下原因而失败:
实际上,这里确实不需要额外的数据成员,因为在整个类定义中都可以访问template参数。
因此,对于像您这样的非类型模板参数,只需:
template <int size_of_array>
class arr
{
public:
static int size_of() { return size_of_array; }
};
现在arr<42>::size_of()
是42!
(我将其设置为static
,不是因为您需要,而是因为在此示例中它是有道理的;您也可以将其设置为非static
,但将其设置为{{1 }}成员函数。)
对于类型:
const
现在template <typename T>
class arr
{
public:
using array_size_t = T;
};
是类型arr<T>::array_size_t
!