当前位置: 首页 > 知识库问答 >
问题:

获取数组指针模板参数的大小

阎乐池
2023-03-14

我想知道我是否可以自动推断数组的大小,它作为模板参数传递,而不(显式地)传递它的大小。

#include <iostream>

template<const int* arr>
struct array_container
{
    static constexpr int val = arr[1];
    array_container() {
        std::cout << val << std::endl;
    }
//  static constexpr int arr_size = ??;
};

constexpr int one[] = { 1 };
constexpr int two[] = { 1, 2 };

int main()
{
//  array_container<one> array_one;
    array_container<two> array_two;
//  (void) array_one;
    (void) array_two;
    return 0;
}
    null

共有1个答案

闾丘炫明
2023-03-14

您可能需要来自C++11标准库的 标头的std::exted模板:

#include <iostream>
#include <type_traits>

constexpr int one[] = { 1 };
constexpr int two[] = { 1, 2 };

int main()
{
    std::cout << std::extent<decltype(one)>::value << std::endl;
    std::cout << std::extent<decltype(two)>::value << std::endl;

    return 0;
}

产出:

1
2
 类似资料:
  • 我正在编写一个简单的函数,它返回数组中最大的整数。我遇到的问题是在数组中找到元素的数量。 下面是函数头: 我如何获得数组'list'中的整数数。 我试过以下几种方法: 任何帮助都将不胜感激!

  • 我有一个下面的类模板 给出以下错误: tmp.cc:19:27:错误:无法专门化(使用“template<>”)未专门化模板constexpr int MyClass::ArraySize<0>()的成员{return 0;} 有可能达到预期的行为吗?使用C++14/C++17特性的解决方案(我想如果-constexpr应该是可能的)受到欢迎,但不能解决我的特定问题,因为只有C++11可用。

  • 主要内容:关于数组指针的谜题数组(Array)是一系列具有相同类型的数据的集合,每一份数据叫做一个数组元素(Element)。数组中的所有元素在内存中是连续排列的,整个数组占用的是一块内存。以 为例,该数组在内存中的分布如下图所示: 定义数组时,要给出数组名和数组长度,数组名可以认为是一个 指针,它指向数组的第 0 个元素。 在C语言中,我们将第 0 个元素的地址称为数组的首地址。以上面的数组为例,下图是 arr 的指向:

  • 本文向大家介绍指针数组、数组指针、函数指针的区别?相关面试题,主要包含被问及指针数组、数组指针、函数指针的区别?时的应答技巧和注意事项,需要的朋友参考一下 指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身的大小决定,每一个元素都是一个指针,在32 位系统下任何类型的指针永远是占4 个字节。它是“储存指针的数组”的简称。 数组指针:首先它是一个指针,它指向一个数组。在32

  • 我发现这个问题几乎是一个精确的重复,但我认为答案没有分析出漏洞。参见:`*((*(&array+1))-1)`用于获取自动数组的最后一个元素是否安全? 我知道通常的方法是计算来得到数组中的元素数量。(在注释中已经向我指出C++有) 所以,我推论,如果我能通过最后一个元素找到1的地址,就可以用指针数学来计算这个数字。但是,后来我想到我可以: 在C和C++中是否有允许这种取消引用是合法的? 我知道允许

  • 是否可以将指针作为可变模板参数传递给成员。我似乎搞不懂语法。 对于函数调用,它的工作原理如下: 可以这样使用: 我希望以类似于类模板的方式传递params 应该这样使用: 我很难弄清楚什么东西应该是什么。 如果成员类型已知,并且只有一个参数,则可以这样做: 有没有一种方法来推广这个变量参数列表的成员指针,其中成员是不同的未知事先类型? 更新:用于固定已知类型的成员指针的变量参数包声明如下: 现在我