std :: tuple_size和引用

时间:2013-12-29 17:08:23

标签: c++ c++11 stl

我的问题是好奇而且非常简短:有没有一个很好的理由说明为什么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不能用于引用类型。有什么想法吗?

1 个答案:

答案 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> {
};

(我希望我在手机上输入正确的内容)