问题标签 [boost-hana]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
205 浏览

c++ - 如何使用 Boost Hana 删除元编程递归

我正在尝试根据发送到函数的类型创建一个位集。但是让我们稍微减少一下测试用例。

警告:我在这个例子中使用了自动 gcc 扩展,我不需要使用模板参数。

似乎我的元组不被认为是可搜索的,但如果我在 lambda 之外尝试相同的 hana::contains 我没有问题。

整个错误是巨大的,所以在那里检查:现场演示

顺便说一句,我尝试使用 for 循环执行此操作,但失败了。你知道在 C++17/20 中做这种事情的好方法吗?

0 投票
1 回答
595 浏览

c++ - 没有 constexpr 内容的 constexpr 循环

我想使用 boost hana 来生成这个最终代码:

container_c 是在编译时生成的地图,不过我认为这并不重要。foo2 不是 constexpr

我正在考虑使用hana::size(tuple).times,但我需要一个增量,可能正在使用hana::make_range(hana::size_c<0>, hana::size(tuple)),但我不知道该怎么做。

我希望找到一个函数,它可以让我在 hana 中的元组的每个成员上执行一个函数。类似的东西,hana::transform但对于 void lambda。

我没想到很难找到如何使用Hana,我应该像过去那样使用专业吗?

顺便说一句,我现在使用的是 gcc 7.1,但你可以假设我没有编译器限制。

0 投票
1 回答
299 浏览

c++ - 推动 Hana Concepts 的实施

Boost Hana 似乎没有记录图书馆的这一方面,所以我想知道我在做什么至少是合法的。

我已经开始在我的代码中添加一堆概念,我不得不使用一些 hana 概念。有一个例子:

像这样为 Boost Hana Functor 概念制作“别名”可以吗?或者它可以随时改变?

顺便说一句,错误并不十分精确。可能是因为 Hana 使用的是 C++14 并且不能使用概念。但是有没有计划有一天升级到 C++20?

0 投票
3 回答
471 浏览

c++ - C++ 概念循环

我想要求编译器检查一个元组是否只包含“元类型”。

顺便说一句,我对 C++ 概念完全陌生。

所以我想确保序列中的每个类型(我们只说这个例子的 Iterable )都是“元类型”。

如果它可以简化代码,我正在使用 Boost Hana。

目前我什至不确定这是否可能。我希望是的,我想我只需要学习更多元编程的东西。所以我会继续搜索和尝试,但如果有人已经有了答案,谢谢!

0 投票
1 回答
104 浏览

c++ - 从 N 个元素的元组到 N/2 对的元组

我想知道,不使用典型的递归函数,而是使用boost::hana例如,如何以最简单的方式使用以下类型的对象进行转换booststd例如):

到一个类型的对象:

我正在查看boost::hana文档,但我发现没有比使用递归模板函数手动编程更简单的方法了(我不得不说有一些我无法理解的 hana 函数)。

注意:我最初的想法是创建一个从 0 到 N hana::range(在两个列表上成对运行以创建std::pairs... 这是太多的步骤,并且可以通过手动实现更容易实现;但我确定在 hana 文档中我遗漏了一些东西。

0 投票
1 回答
170 浏览

c++ - 模板模板的hana类型

我正在尝试使用 boost::hana 生成一个使用模板的类型,但遇到了麻烦。

我有以下课程

我现在想Foo<BarImpl>为每个BarX<T>类创建一个:

问题,我不确定这应该怎么做。我的第一次尝试是做

但这失败了

该注释表明hana::template_不适用于模板模板。是这样吗?如果是这样,是否有替代解决方案?

0 投票
1 回答
139 浏览

c++ - 如何查询一个类型是否为Struct?

给定一个 type T,我想知道那个 type 是否满足 Boost.Hana 的Struct概念。换句话说,我想构建一个元函数is_struct_v,使得

以下代码编译:

is_struct_v<std::vector<int>>应该返回false。

我的猜测是,hana 的is_valid“功能”适用于此,但是,我无法让编译器屈服于我的意愿。这是我的尝试:

这确实返回true了这种foo_t情况,但是当我尝试申请is_struct_vstd::vector<int>,我在 clang(主干)中收到以下错误:

更新:我已经解决了我自己的问题;请参阅下面的答案。也就是说,我仍然希望能解释为什么使用的版本hana::members不起作用。我觉得static_assert触发编译时错误很奇怪,因为我认为is_valid应该将 SFINAE 排除在外。我错过了什么?

0 投票
1 回答
1051 浏览

c++ - 使用 boost::hana 传递反射

有没有办法获得一个代表boost::hana结构反射的对象,我可以传递并存储在地图/数据库中?

我正在环境和作为插件动态加载的共享库之间创建一个接口。我需要反映库中使用的一些数据结构,以便用户可以在运行时使用环境导航这些结构。

在一个例子中,我有这个结构,我可以很容易地反映:

我的库将创建一个实例,Car并且需要通过入口点使其可用。这意味着它需要坚持从我的环境 SDK 中实现一个基类,它看起来有点像这样:

我的问题是我不确定如何实施LibraryAPI::to_reflection.

当使用 boost::hana 反射结构时,我希望看到创建的一些对象或成员代表反射规则,这就是我希望通过界面传递的内容。但是,调试器没有显示类似的内容。

我怀疑这一切都在编译时解析的巨型模板中得到了解决。但是,我的环境和库不会同时编译,所以这让事情变得更加复杂。

有没有办法获得一个代表 boost::hana 结构反射的对象,我可以传递并存储在地图/数据库中?

- - - - - - - -编辑 - - - - - -

我并不关心取消引用数据,而是关心知道库使用的每个成员的名称、偏移量和大小。这将让我使用环境根据配置在库之间映射数据,而无需在库之间共享头文件。我可能会在反射中添加类型作为在实际执行之前验证 memcpy 的一种方式。

不幸的是,在这种情况下,当我在调试器中运行它时bmw.brand,永远不会占用相同的内存。boost::hana::second(pair)

0 投票
1 回答
460 浏览

c++ - boost::hana::map 作为数据成员

我目前正在boost::hana为个人项目学习。

在下面的代码片段中,我创建了一个boost::hana::map具有as 键和一个as 值type_c<T>的实例。Foo<T>

它有效,但我真的很想将my_map变量用作类成员,并且不可能auto在成员声明中使用限定符。此外,如果我能够types以某种方式传递元组(作为模板参数或构造函数参数),那就太好了。

你有什么建议吗?

0 投票
1 回答
142 浏览

boost - Boost.Hana 中的 BOOST_FUSION_ADAPT_ASSOC 等价物是什么?

在过去的美好时光里,我们曾经将 a 适配struct到 Boost.Fusion 容器或关联容器中

现在有了 Boost.Hana,我们也可以适应

问题: Boost.Hana中是否有某种BOOST_HANA_ADAPT_ASSOC_STRUCT(相当于)?BOOST_FUSION_ADAPT_ASSOC_STRUCT还是现在做的不同?

奖金问题:有BOOST_HANA_ADAPT_TPL吗?