从类型中获取数组的大小

时间:2014-09-19 07:51:30

标签: c++ templates

我有一个模板参数T,我知道它将是

MyArray<Tbis, n>

有没有办法取回整数n所以我可以用它作为模板参数?

致以最诚挚的问候,

3 个答案:

答案 0 :(得分:1)

这是你想要做的吗?

#include <iostream>
#include <array>

template <typename T, size_t N>
void f(std::array<T, N>& a)
{
    std::cout << N << '\n'; 
}

int main()
{
    std::array<int, 34> a;
    f(a);
}

答案 1 :(得分:1)

如果我正确理解了这个问题,你想获得一个数组的大小,并用作模板参数。为此,您可以使用size(),因为它是一个constexpr。

这样的事情:

#include <iostream>
#include <array>


typedef std::array< int, 72 > myArray;

template< int N = myArray().size() >
struct A
{
    void foo()
    {
        std::cout << N << std::endl;
    }
};

int main()
{
    A<> a;

    a.foo();
}

答案 2 :(得分:0)

是。成员函数(至少在Visual Studio 2010上)size()max_size()都返回项目数。

#include "stdafx.h"
#include <array>
#include <iostream>

template<class T>
int tuple_size(T t)
{
    return std::tuple_size<T>::value;
}

int main()
{ 
    std::array<int, 4> nums;
    std::cout << "size(): " << nums.size() << "\n";
    std::cout << "max_size(): " << nums.max_size() << "\n";
    std::cout << "tuple_size: " << tuple_size(nums)  << "\n";
}