gpt4 book ai didi

c++ - 如何从 boost::hana::tuple_t 中检索类型?

转载 作者:行者123 更新时间:2023-11-30 04:53:53 25 4
gpt4 key购买 nike

我已经使用 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>])const引用boost::hana::type_impl<int>::_并且您无法通过查询引用 来获取 ::type来自引用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>);

关于c++ - 如何从 boost::hana::tuple_t 中检索类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53780781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com