【发布时间】:2019-05-16 09:42:39
【问题描述】:
我找不到类似的问题...
我认为有两种“简单”的方法可以在编译时获取元组的第 I^th 元素的类型(如果我错了,请纠正我):
using TI1 = typename std::tuple_element<I, Tuple>::type;using TI2 = decltype(std::get<I>(Tuple{}));
事实上,如果我们通过typeid(...).name() 打印这些类型中的每一个,它们返回相同的值。
但是...std::is_same 在比较这些时返回 false:
这是预期的吗?为什么?
using Tuple = std::tuple<float,double>;
constexpr size_t I = 0;
static_assert(std::is_same<typename std::tuple_element<I, Tuple>::type,
decltype(std::get<I>(Tuple{}))>::value, "different types" );
【问题讨论】:
-
get可能返回一个右值引用,将std::remove_reference_t拍到它上面。 -
我很糟糕,我感觉很糟糕。你是对的先生。