variadic template c ++中的sizeof

时间:2014-01-16 03:09:42

标签: c++ templates variadic

我需要知道可变参数模板的参数包中有多少项。

我的代码:

#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/

1 个答案:

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