sizeof在variadic模板c ++中
我需要知道可变参数包的参数包中有多少项。
我的代码:
#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 ++处理成员变量的新类内初始化的一个bug。 如果您将代码更改为
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
,避免这个问题......)