【发布时间】:2010-05-05 06:22:55
【问题描述】:
我看到@GMan 为可变参数模板实现了a version of sizeof...,它(据我所知)相当于内置的sizeof...。这不违背第二个设计原则:prefer libraries to language extensions?
【问题讨论】:
标签: c++ language-design c++11
我看到@GMan 为可变参数模板实现了a version of sizeof...,它(据我所知)相当于内置的sizeof...。这不违背第二个设计原则:prefer libraries to language extensions?
【问题讨论】:
标签: c++ language-design c++11
来自Variadic Templates (Revision 3) (N2080=06-0150),第 6 页:
虽然不是绝对必要的(我们可以在没有此功能的情况下实现
count),检查参数包的长度是一种常见的操作,需要一种简单的语法。此外,当可变参数模板与概念结合时,出于类型检查的原因,此操作可能变得必要;请参阅第 3.3 节。
(第 3.3 节讨论了现在无关紧要的概念。)
【讨论】:
sizeof... 也同样适用于模板和函数参数包。所以sizeof...(T) 和sizeof...(t) 工作得同样好。我相信,基于库的解决方案可以与模板或函数参数包一起使用,但不能同时与两者一起使用。因为一个扩展产生一系列类型,而另一个扩展产生一系列表达式。也许将其写为template<size_t...> struct count;,然后将包传递为count<sizeof(T)...> 可以工作。由于sizeof 可以处理看似可行的类型和表达式,但它显然更丑:)
sizeof... 只是糖,我想。
sizeof 和... 一样确实是语言的核心,虽然countof 函数可能存在,但我们已经保留了sizeof 和...,所以我们不妨方便地获取计数那样。
相反,如果sizeof 和... 没有被保留,那么添加这样的东西的想法可能会失败,因为新的关键字往往会不受欢迎。 (越少越好。)
【讨论】: