我找不到类似的问题...
我认为有两种“简单”的方法可以在编译时获取元组第I个元素的类型(如果我错了,请纠正我):
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
添加到它上面即可。 - HolyBlackCat