问题标签 [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.
c++ - 如何使用 Boost Hana 删除元编程递归
我正在尝试根据发送到函数的类型创建一个位集。但是让我们稍微减少一下测试用例。
警告:我在这个例子中使用了自动 gcc 扩展,我不需要使用模板参数。
似乎我的元组不被认为是可搜索的,但如果我在 lambda 之外尝试相同的 hana::contains 我没有问题。
整个错误是巨大的,所以在那里检查:现场演示
顺便说一句,我尝试使用 for 循环执行此操作,但失败了。你知道在 C++17/20 中做这种事情的好方法吗?
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,但你可以假设我没有编译器限制。
c++ - 推动 Hana Concepts 的实施
Boost Hana 似乎没有记录图书馆的这一方面,所以我想知道我在做什么至少是合法的。
我已经开始在我的代码中添加一堆概念,我不得不使用一些 hana 概念。有一个例子:
像这样为 Boost Hana Functor 概念制作“别名”可以吗?或者它可以随时改变?
顺便说一句,错误并不十分精确。可能是因为 Hana 使用的是 C++14 并且不能使用概念。但是有没有计划有一天升级到 C++20?
c++ - C++ 概念循环
我想要求编译器检查一个元组是否只包含“元类型”。
顺便说一句,我对 C++ 概念完全陌生。
所以我想确保序列中的每个类型(我们只说这个例子的 Iterable )都是“元类型”。
如果它可以简化代码,我正在使用 Boost Hana。
目前我什至不确定这是否可能。我希望是的,我想我只需要学习更多元编程的东西。所以我会继续搜索和尝试,但如果有人已经有了答案,谢谢!
c++ - 从 N 个元素的元组到 N/2 对的元组
我想知道,不使用典型的递归函数,而是使用boost::hana
例如,如何以最简单的方式使用以下类型的对象进行转换boost
(std
例如):
到一个类型的对象:
我正在查看boost::hana
文档,但我发现没有比使用递归模板函数手动编程更简单的方法了(我不得不说有一些我无法理解的 hana 函数)。
注意:我最初的想法是创建一个从 0 到 N hana::range
(在两个列表上成对运行以创建std::pair
s... 这是太多的步骤,并且可以通过手动实现更容易实现;但我确定在 hana 文档中我遗漏了一些东西。
c++ - 模板模板的hana类型
我正在尝试使用 boost::hana 生成一个使用模板的类型,但遇到了麻烦。
我有以下课程
我现在想Foo<BarImpl>
为每个BarX<T>
类创建一个:
问题,我不确定这应该怎么做。我的第一次尝试是做
但这失败了
该注释表明hana::template_
不适用于模板模板。是这样吗?如果是这样,是否有替代解决方案?
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_v
时std::vector<int>
,我在 clang(主干)中收到以下错误:
更新:我已经解决了我自己的问题;请参阅下面的答案。也就是说,我仍然希望能解释为什么使用的版本hana::members
不起作用。我觉得static_assert
触发编译时错误很奇怪,因为我认为is_valid
应该将 SFINAE 排除在外。我错过了什么?
c++ - 使用 boost::hana 传递反射
有没有办法获得一个代表boost::hana
结构反射的对象,我可以传递并存储在地图/数据库中?
我正在环境和作为插件动态加载的共享库之间创建一个接口。我需要反映库中使用的一些数据结构,以便用户可以在运行时使用环境导航这些结构。
在一个例子中,我有这个结构,我可以很容易地反映:
我的库将创建一个实例,Car
并且需要通过入口点使其可用。这意味着它需要坚持从我的环境 SDK 中实现一个基类,它看起来有点像这样:
我的问题是我不确定如何实施LibraryAPI::to_reflection
.
当使用 boost::hana 反射结构时,我希望看到创建的一些对象或成员代表反射规则,这就是我希望通过界面传递的内容。但是,调试器没有显示类似的内容。
我怀疑这一切都在编译时解析的巨型模板中得到了解决。但是,我的环境和库不会同时编译,所以这让事情变得更加复杂。
有没有办法获得一个代表 boost::hana 结构反射的对象,我可以传递并存储在地图/数据库中?
- - - - - - - -编辑 - - - - - -
我并不关心取消引用数据,而是关心知道库使用的每个成员的名称、偏移量和大小。这将让我使用环境根据配置在库之间映射数据,而无需在库之间共享头文件。我可能会在反射中添加类型作为在实际执行之前验证 memcpy 的一种方式。
不幸的是,在这种情况下,当我在调试器中运行它时bmw.brand
,永远不会占用相同的内存。boost::hana::second(pair)
c++ - boost::hana::map 作为数据成员
我目前正在boost::hana
为个人项目学习。
在下面的代码片段中,我创建了一个boost::hana::map
具有as 键和一个as 值type_c<T>
的实例。Foo<T>
它有效,但我真的很想将my_map
变量用作类成员,并且不可能auto
在成员声明中使用限定符。此外,如果我能够types
以某种方式传递元组(作为模板参数或构造函数参数),那就太好了。
你有什么建议吗?
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
吗?