我的问题是好奇而且非常简短:有没有一个很好的理由说明为什么std :: tuple_size没有专门化的参考?
(现在的动机)
我有很多看起来像的代码:
template<typename Tuple, typename Indices =
std::make_index_sequence<
std::tuple_size<
typename std::remove_reference<Tuple>::type>::value
>
>
auto func(Tuple&& t, ...) -> decltype(...) {
return ...;
}
我希望使用remove_reference不是错误的方法,但是因为它只适用于类型级别我在这里看不出问题。另一种可能性是使用std :: move传递元组,因为Tuple不是引用,但由于我只想转发元组,我也想传递lvalue引用,所以我使用了std :: remove_reference。
这并不坏,我只是好奇为什么tuple_size不能用于引用类型。有什么想法吗?
答案 0 :(得分:1)
通常,类型特征对实际传递的类型而不是任何可能相关的类型进行操作。为std::tuple_size>
提供基本操作似乎是一致的,可用于创建更方便的版本。走另一条路,即拥有方便的版本并从中构建更具限制性的版本,似乎更有问题。
只需使用帮手:
template <typename T>
struct my_tuple_size
: std_integral_constant<std::size_t,
std::tuple_size<
typename std::remove_reference<T>::type>
::value> {
};
(我希望我在手机上输入正确的内容)