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 ,避免这个问题......)

链接地址: http://www.djcxy.com/p/62161.html

上一篇: sizeof in variadic template c++

下一篇: c++11 Variadic Printf performance