数组大小元函数-它是在boost某处
Array size metafunction - is it in boost somewhere?
我在一个博客上发现了以下模板:
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::array
或boost::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 ?
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- boost::进程间消息队列引发错误
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- cmake如何在fedora工作站中找到boost静态库包
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- Boost Graph Library,修复节点大小
- 什么是"#include <boost/functional/hash.hpp> "?
- 基于boost的程序的静态链接——zlib问题
- std 或 boost 在<T>某处有标签或type_t<T>吗?
- c ++,数组的值在某处意外变化,你能帮我找出在哪里吗?
- 存储在某处的动态分配数组的大小
- Debugging Boost.Test in Eclipse:debugger 不会在断点处停止
- 我可以根据系统文件中某处的不同系统加载默认窗口图标吗?
- Java(或Cpp)某处阻塞
- C++ 如果某处有空间,则窗口系统 ( "path" ) 无法正常工作
- 数组大小元函数-它是在boost某处
- 是否在某处定义了空std::string ?
- Boost asio TCP -套接字写入数据与缓冲区中的数据不同-可能在某处出现线程不安全
- 从end到某处(不是begin)迭代vector对象
- 是否有一个用于指针删除的函数(对象)模板可在某处重新使用(boost, STL)