Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 存储可变模板的模板参数数_C++_C++11_Variadic Templates - Fatal编程技术网

C++ 存储可变模板的模板参数数

C++ 存储可变模板的模板参数数,c++,c++11,variadic-templates,C++,C++11,Variadic Templates,在下面的示例中 template <size_t... Entries> struct StaticArray { enum {N = sizeof...(Entries)}; size_t array[N] = {Entries...}; }; 模板 结构静态数组 { 枚举{N=sizeof…(条目)}; 数组[N]={Entries…}; }; 在enum中存储条目数在我看来更像是一种黑客行为 这真的是教科书中存储条目数的方法还是有更干净的方法?我更喜欢静态const

在下面的示例中

template <size_t... Entries>
struct StaticArray
{
  enum {N = sizeof...(Entries)};
  size_t array[N] = {Entries...};
};
模板
结构静态数组
{
枚举{N=sizeof…(条目)};
数组[N]={Entries…};
};
enum
中存储条目数在我看来更像是一种黑客行为


这真的是教科书中存储条目数的方法还是有更干净的方法?

我更喜欢
静态constexpr
成员:

template <size_t... Entries>
struct StaticArray
{
    static constexpr size_t N = sizeof...(Entries);
    size_t array[N] = {Entries...};
};
模板
结构静态数组
{
静态constexpr size\u t N=sizeof…(条目);
数组[N]={Entries…};
};

可能与一系列其他的
constepr
成员函数(
size()
begin()
end()
data()
,等等)一起使用。

“存储”是一种奇怪的说法。没有使用存储,C++模板都是声明。因此,
N
更像是一个别名。话虽如此,我同意@Barry的回答:
enum
并不是最好的机制。“enum hack”是这个词的字面意思,所以应该告诉你:——)+1,
enum
hack不再是必要的,现在我们有了
constepr
(老实说,在许多实际情况下,可能在此之前)。只要您的程序不采用
constepr
的地址,它就会作为文本内联(由任何半体面的编译器,yadda-yadda)。