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)。