我想了解新运算符sizeof...
的优势(与sizeof
运算符不同)。我在网上搜索了一些例子,似乎都像下面这个例子:
template<class... ArgTypes>
std::size_t GetLength()
{
return sizeof...(ArgTypes);
}
我认为这些例子不是很具有说明性。
有没有真实的例子可以说明sizeof...
非常有用?
更新:
我在这里找到另外一些例子,看起来更有意义:
template<class ...A> void func(A ...args){
typedef typename common_type<A...>::type common;
std::array<common, sizeof...(A)> a = {{ args... }};
}
template<typename... A> int func(const A&... args)
{
boost::any arr[sizeof...(A)] = { args... };
return 0;
}
sizeof...(T)
提供了实际的功能。当然,它可以与语言的其余部分一起实现,并且看起来像size_of<T...>()
,但内置它并不会有任何损失(它提供了更好的性能机会,并且不添加新关键字)。 - R. Martinho Fernandesget<I>...
的操作的内容。 - Kerrek SBsizeof...
,我期望使用类似于各种类型的以下内容:template<typename... Ts> struct sizeer{enum{value=0};}; template<typename T, typename... Ts> struct sizer<T, Ts...>{enum{value=1+sizer<Ts...>::value};};
。请注意,它需要O(N)递归深度才能找到N个参数列表的大小,而sizeof...
则在O(1)深度中完成。至于sizeof...
的用途,每当您想要构建索引以将可变参数推入元组或提取相同的参数时,您最终都会使用它。 - Yakk - Adam Nevraumont