是否可以从模板参数中提取数组大小
Is it possible to extract array size from a template argument?
如果这是重复的,我深表歉意。我环顾四周,发现了类似的问题,但没有完全像这样的。
如果我实例化这样的模板…
MyClass<int[10]> c;
如何编写模板以访问类型和数组大小我想的都试过了,但都试不到。
我的灵感来自std::函数模板,它可以让你使用与函数原型类似的语法,比如。。。
std::function<int(MyClass&)> myfunc;
所以我认为数组和它的大小有相似的东西会很好。我可以使用任何最新的c++功能(c++11/14(。
您可以添加一个部分专业化,如下所示:
template <typename T, ptrdiff_t N>
class MyClass<T[N]>
{
};
这是一个演示。
template<class Arr>
struct array_size {};
template<class T, size_t N>
struct array_size<T[N]>:std::integral_constant<std::size_t, N>{};
template<class Arr>
struct array_element {};
template<class Arr>
using array_element_t = typename array_element<Arr>::type;
template<class T, size_t N>
struct array_element<T[N]>{using type=T;};
现在您可以在不拆包类型的情况下使用array_size<ArrType>{}
和array_element_t<ArrType>
。
template <typename T, typename = void>
struct deduce
{
};
template <typename T>
struct deduce<T,
typename ::std::enable_if<
::std::is_array<T>{}
>::type
>
{
using value_type =
typename ::std::decay<decltype(::std::declval<T>()[0])>::type;
static constexpr auto size = sizeof(T) / sizeof(value_type);
};
相关文章:
- 从指向结构数组的指针中提取元素
- 在C++如何从数组中提取成员并返回成员类型的数组?
- 如何从字符数组C++中提取2个整数并将它们存储在2个变量中(初学者)
- C 仅使用指针从多维数组中提取特定列
- 将文本文件数据读入字符数组时提取运算符的歧义
- 如何在 c++ 中提取 2D 数组的列?
- 从数组中提取一对数字
- 从自定义结构数组中提取数据
- 需要根据读取的数据类型将ifstream提取到单独的数组中
- 将 __m128i?布尔数组中每个布尔字节的低位提取到打包的位图
- 无法从结构数组 C++ 中提取数据
- 如何从对象数组中提取属性数组?
- 将字符数组的一部分提取为 char*
- 使用C 从定界线拆分字符串中提取整数数组
- 如何将提取的字符串数据转换为字符数组
- QRegExp提取数组名称和索引
- 从二进制文件中提取数组数据的正确方法
- 如何从结构数组中提取数组
- 在编译时使用 C++ 从另一个数组中提取数组
- 是否可以从模板参数中提取数组大小