问题标签 [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++ - 在没有预处理器的情况下从 hana 元组创建函数签名
有没有办法在没有预处理器的情况下做到这一点?
c++ - 将integral_constants的元组转换为int的constexpr元组
假设我有一个hana::integral_constant
像这样的 s 元组:
我现在正试图从这个中生成一个 constexpr 元组,如下所示:
我的尝试:
问题是 lambda 不是 constexpr ......所以问题是:如何将integral_constant
s 的元组转换为 constexpr lambda?
笔记:
我正在使用 c++14
c++ - 如何使用 BOOST_HANA_ADAPT_ADT 定义 get/set 对?
我想反省一下第三方 ADT,它定义了成对的 getter/setter 来访问类的“属性”。例如:
我想写:
这可能吗?
c++ - 使用 boost::hana 进行自省
我正在浏览令人敬畏的 boost::hana 库的帮助页面的示例,但无法让自省示例正常工作。
此代码旨在在编译时检查对象是否具有特定的成员函数,然后使用该成员函数或执行默认操作。
所以我声明了这两种类型:
这是使用以下检查的第一个版本hana::is_valid
:
这是使用以下检查的第二个版本hana::sfinae
:
使用这样的两个版本...
...总是显示“toString not defined”而不是“implements toString()”。
注意:检查obj
显示static_assert(has_toString(obj), "Does not implement toString().");
正确的行为。
我错过了什么吗?还是编译器(clang 5.0.1)或库(boost 1.66)问题?
谢谢你。
c++ - `boost::hana` 模板化函数的自省
我想知道一个类型是否定义了一个带有模板参数的成员函数,但模板参数受 SFINAE 约束。
示例我有一个A
具有单个功能的类型foo
Condition
是一些条件,例如std::is_pos_v
现在我boost::hana::is_valid
用来确定一个类型是否有一个类似的成员函数foo()
,foo(int)
但是当使用模板参数时我迷路了。
我想写这样的东西
问题是我应该放什么而不是???
?
编译器可能不可能“证明”一个类型A
满足:“对于每个T
满足的类型Condition
都有一个成员函数A::foo(T)
”
所以为了让编译器更容易,我很乐意至少“证明”一个类型A
成立:“有一个类型T
,所以有一个成员函数A::foo(T)
”
不幸的是,这在我的示例中仍然很难,因为这需要证明存在满足Condition
.
因此,出于自省的目的,是否有可能忽略 SFINE?然后我可以选择任意类型并测试 eg 的存在A::foo(int)
。
c++ - 使用 hana::transform 在 C++14 中转换元组内的类型
我正在尝试使用 Boosthana::transform
来更改hana::tuple
. 例如,说我有
我想生产
尝试 1
解决方案对我来说似乎很简单:使用hana::transform
并让应用的函数返回hana::type_c<std::vector<decltype(T)::type>>
。但是,我无法完成这项工作:
问题是 lambda 表达式不是constexpr
- 并且我想留在 C++14 中,即 lambda 不能是constexpr
.
尝试 2
我的下一个想法:如果我将它包裹hana::transform
成一个decltype
,然后在上面使用hana::type_c
呢?这样,lambda 永远不需要被评估(只需要推断它的返回类型),并且constexpr
ness 应该无关紧要:
但是,现在我遇到了 lambda 表达式可能不会出现在“未评估的上下文”中的问题。
我的方法完全错误吗?我应该使用其他东西hana::transform
吗?
谢谢你的帮助。
编辑:
示例代码:
c++ - 为什么 boost::hana::tuple_c 实现的类型是定义的?
状态的Boost.Hana 文档tuple_c
:
另请注意,返回的对象类型
tuple_c
和等效调用make<tuple_tag>
可能不同。
后跟以下代码段:
然而,实际的实现只是tuple_c
:
to_tuple
而且,事实上,代码片段在没有包装器的情况下工作得很好:
问题:为什么要tuple_c
定义实际的实现类型?包装不是to_tuple
多余的吗?
c++ - 使用模板参数定义 Hana 结构
有没有办法为 Hana 定义(调整)具有模板参数的结构?
典型的例子是一个非模板类,
我们我尝试添加模板参数出现编译错误:
我虽然因为使用逗号而失败,所以我尝试decltype(Person<S, I>)
代替Person<S,I>
.
在 Boost.Fusion 我们有BOOST_FUSION_DEFINE_TPL_STRUCT,但我在 Hana 中找不到等价物。
如何使用模板参数定义 Hana 结构?
c++ - 带有提升模板的 hana::make_map
我正在尝试在编译时创建键任务对的映射。键是一个序列号,它也应该用作映射任务类型内的模板参数。我学到的是,我需要将我的任务提升到一个元函数中才能完成这项工作,但是在创建hana::types
与我的模板参数匹配的权限时我已经遇到了问题。
这是我到目前为止所拥有的:
Clang 抱怨:
错误:模板模板参数的模板参数与其对应的模板模板参数不同
我做错了什么,这是正确的方法吗?
最好的吴姆
c++ - 使用 boost::hana 创建一个大的编译时间映射
我正在尝试使用boost::hana
创建一个constexpr
非常大的查找表(最多 32768 个元素)。这是我的代码:
出于测试目的,每对的值为hana::int_c<0>
。这被一些有意义的东西所取代。编译这个需要一些时间。有没有更快的方法来使用hana?
谢谢