如何从 boost::hana::tuple_t 检索类型?
How to retrieve types from boost::hana::tuple_t?
我已经使用 hana:tuple_t
来存储和检索类型列表:
auto Types = hana::tuple_t<int, double>;
auto first_t = Types[hana::int_c<0>];
static_assert(std::is_same_v<decltype(first_t)::type, int>); // line 3
上面的代码工作正常,但是当我试图用它的实际表达式替换变量 first_t
时:
static_assert(std::is_same_v<decltype(Types[hana::int_c<0>])::type, int>); //line 4
我得到一个编译错误:
template argument 1 is invalid
static_assert(std::is_same_v<decltype(Types[hana::int_c<0>])::type, int>);
error: decltype evaluates to ‘const boost::hana::type_impl<int>::_&’, which is not a class or enumeration type
上面代码的第3行和第4行是等价的,为什么第4行编译报错:
decltype(Types[hana::int_c<0>])
是对 boost::hana::type_impl<int>::_
的 const
引用,您无法查询 reference 以从参考d类型.
first_t
只用 auto
声明,这会删除引用和常量。如果你想保留它(在不同的情况下),你可以声明它 auto & first_t = ...
.
static_assert(std::is_same_v<decltype(first_t), boost::hana::type_impl<int>::_>);
您可以使用 std::decay_t
删除引用。
static_assert(std::is_same_v<
std::decay_t<decltype(Types[hana::int_c<0>])>::type, int>);
我已经使用 hana:tuple_t
来存储和检索类型列表:
auto Types = hana::tuple_t<int, double>;
auto first_t = Types[hana::int_c<0>];
static_assert(std::is_same_v<decltype(first_t)::type, int>); // line 3
上面的代码工作正常,但是当我试图用它的实际表达式替换变量 first_t
时:
static_assert(std::is_same_v<decltype(Types[hana::int_c<0>])::type, int>); //line 4
我得到一个编译错误:
template argument 1 is invalid
static_assert(std::is_same_v<decltype(Types[hana::int_c<0>])::type, int>);
error: decltype evaluates to ‘const boost::hana::type_impl<int>::_&’, which is not a class or enumeration type
上面代码的第3行和第4行是等价的,为什么第4行编译报错:
decltype(Types[hana::int_c<0>])
是对 boost::hana::type_impl<int>::_
的 const
引用,您无法查询 reference 以从参考d类型.
first_t
只用 auto
声明,这会删除引用和常量。如果你想保留它(在不同的情况下),你可以声明它 auto & first_t = ...
.
static_assert(std::is_same_v<decltype(first_t), boost::hana::type_impl<int>::_>);
您可以使用 std::decay_t
删除引用。
static_assert(std::is_same_v<
std::decay_t<decltype(Types[hana::int_c<0>])>::type, int>);