我的问题是好奇而且很简短:为什么没有针对引用的std::tuple_size特化,这是否有充分的理由?
(接下来是动机)
我有很多代码看起来像:
我希望使用remove_reference不是错误的做法,但由于它只在类型级别上起作用,所以我在这里看不到问题。另一个可能性是通过std::move传递元组,因为这样Tuple就不是引用了,但是由于我只想转发元组,所以我也想传递左值引用,所以我使用了std::remove_reference。
这并不是很糟糕,我只是好奇为什么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就不是引用了,但是由于我只想转发元组,所以我也想传递左值引用,所以我使用了std::remove_reference。
这并不是很糟糕,我只是好奇为什么tuple_size不能处理引用类型。有任何想法吗?
template <typename T> struct my_tuple_size : tuple_size<T> {}; template <typename T> struct my_tuple_size<T&> : tuple_size<T> {}
- rodrigoconstexpr
函数。我不知道哪个版本对编译器来说更容易。 - Dietmar Kühl