我需要知道可变参数模板的参数包中有多少项。
我的代码:
#include <iostream>
using namespace std;
template <int... Entries>
struct StaticArray
{
int size = sizeof... (Entries);// line A
//int array[size] = {Entries...};// line B
};
int main()
{
StaticArray<1,2,3,4> sa;
cout << sa.size << endl;
return 0;
}
我在 A 行遇到编译错误。
如果将此行更改为
static const unsigned short int size = sizeof...(Arguments)
可以编译。我的第一个问题是为什么我需要“static const unsigned short”来编译。 如您所见,我需要一个大小来放入我的数组中。我的最终目标是能够在主函数中打印出这个数组。
请帮忙。谢谢.. 我的理想来自这个网站,但我不知道如何让它发挥作用 http://thenewcpp.wordpress.com/2011/11/23/variadic-templates-part-1-2/
最佳答案
根据评论,我认为这是 g++ 处理成员变量的新类内初始化的错误。如果将代码更改为
template <int... Entries>
struct StaticArray
{
static const int size = sizeof...(Entries); // works fine
};
然后它就可以正常工作了,因为它使用了 C++03 的特殊情况,即在类中初始化 static const 整数成员。
同样,如果您使用新的 C++11 统一初始化语法,它也能正常工作:
template <int... Entries>
struct StaticArray
{
int size{sizeof...(Entries)}; // no problem
};
我很确定这里的赋值形式是有效的,所以我认为 g++(我的系统上是 4.8.2)弄错了。
(当然,大小不能在运行时改变,所以正确的声明可能是 static constexpr std::size_t size
无论如何,避免这个问题......)
关于c++ - 可变参数模板 C++ 中的 sizeof,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21152667/