数组大小元函数-它是在boost某处

Array size metafunction - is it in boost somewhere?

本文关键字:boost 某处 函数 数组      更新时间:2023-10-16

我在一个博客上发现了以下模板:

template <typename T, size_t N>
struct array_info<T[N]>
{
    typedef T type;
    enum { size = N };
};

它是sizeof(a) / sizeof(a[0])的一个优雅的替代品。

获取数组大小的常用构造应该在标准库中的某个地方。我没听说过。谁能告诉我这个功能是在标准库某处和/或在Boost?最好是易于使用和轻量级的形式

我终于自己找到了答案——boost::size():

#include <boost/range.hpp>
int array[10];
boost::size(array); // returns 10

虽然,这些天你可能应该使用std::size()来代替(从c++ 17开始)

在新的c++标准中,头文件中的std::array具有方法size(),该方法返回constexpr,因此在编译时可用。

你应该能够输入像

这样的内容
std::array< YourType, N > arr;
constexpr auto totalSize = arr.size() * sizeof( std::array< YourType, N >::value_type );

c++ 17支持std::size()(在header <iterator>中定义)

#include <iterator>
int my_array[10];
std::size(my_array);
std::vector<int> my_vector(10);
std::size(my_vector);

如果可能的话,我也会推荐std::arrayboost::array。也就是说,您也可以使用boost::extent来获取数组大小,并使用boost::remove_all_extents来获取实际类型。

在c++11中,类型特征在标准库中也是可用的。

编辑:如果您正在寻找操作变量而不是类型的函数,请尝试以下

template <typename T, std::size_t N>
std::size_t array_count(const T(&) [N]) { return N; }

参见使用示例http://ideone.com/IOdfp

您可能需要宏_countof。根据http://www.cplusplus.com/forum/beginner/54241/,它在<cstdio>中定义。但是我不确定它是否在Visual c++之外可用。

无论如何,创建一个头文件并把你的定义放在那里并不复杂。



更新:_countof是微软特有的,但这里有一个关于其他编译器的讨论:在其他编译器中相当于MSVC's _count ?