我需要知道可变参数模板的参数包中有多少项。
我的代码:
#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”来编译。 正如你所看到的,我需要一个大小来放入我的阵列。我的最终目标是能够在main函数中打印出这个数组。
请帮忙。谢谢.. 我的理想来自这个网站,但我不知道如何让它工作 http://thenewcpp.wordpress.com/2011/11/23/variadic-templates-part-1-2/
答案 0 :(得分:1)
根据评论,我认为这是g ++处理成员变量的新类内初始化的一个错误。如果您将代码更改为
template <int... Entries>
struct StaticArray
{
static const int size = sizeof...(Entries); // works fine
};
然后它正常工作,因为它使用C ++ 03在类中初始化静态const积分成员的特殊情况。
同样,如果您使用新的C ++ 11统一初始化语法,它可以正常工作:
template <int... Entries>
struct StaticArray
{
int size{sizeof...(Entries)}; // no problem
};
我很确定赋值表单在这里是有效的,所以我认为g ++(我系统上的4.8.2)是错误的。
(当然,大小在运行时不能改变,所以无论如何正确的声明可能是static constexpr std::size_t size
,避免这个问题...)