问题标签 [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 投票
2 回答
108 浏览

c++ - 在没有预处理器的情况下从 hana 元组创建函数签名

有没有办法在没有预处理器的情况下做到这一点?

0 投票
2 回答
115 浏览

c++ - 将integral_constants的元组转换为int的constexpr元组

假设我有一个hana::integral_constant像这样的 s 元组:

我现在正试图从这个中生成一个 constexpr 元组,如下所示:

我的尝试:

问题是 lambda 不是 constexpr ......所以问题是:如何将integral_constants 的元组转换为 constexpr lambda?

笔记:

我正在使用 c++14

0 投票
1 回答
155 浏览

c++ - 如何使用 BOOST_HANA_ADAPT_ADT 定义 get/set 对?

我想反省一下第三方 ADT,它定义了成对的 getter/setter 来访问类的“属性”。例如:

我想写:

这可能吗?

0 投票
1 回答
521 浏览

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)问题?

谢谢你。

0 投票
1 回答
168 浏览

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)

0 投票
1 回答
460 浏览

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 永远不需要被评估(只需要推断它的返回类型),并且constexprness 应该无关紧要:

但是,现在我遇到了 lambda 表达式可能不会出现在“未评估的上下文”中的问题。

我的方法完全错误吗?我应该使用其他东西hana::transform吗?

谢谢你的帮助。

编辑

示例代码:

0 投票
3 回答
162 浏览

c++ - 为什么 boost::hana::tuple_c 实现的类型是定义的?

状态的Boost.Hana 文档tuple_c

另请注意,返回的对象类型tuple_c和等效调用make<tuple_tag>可能不同。

后跟以下代码段:

然而,实际的实现只是tuple_c

to_tuple而且,事实上,代码片段在没有包装器的情况下工作得很好:

问题:为什么要tuple_c定义实际的实现类型?包装不是to_tuple多余的吗?

0 投票
1 回答
308 浏览

c++ - 使用模板参数定义 Hana 结构

有没有办法为 Hana 定义(调整)具有模板参数的结构?

典型的例子是一个非模板类,

我们我尝试添加模板参数出现编译错误:

我虽然因为使用逗号而失败,所以我尝试decltype(Person<S, I>)代替Person<S,I>.

在 Boost.Fusion 我们有BOOST_FUSION_DEFINE_TPL_STRUCT,但我在 Hana 中找不到等价物。

如何使用模板参数定义 Hana 结构?

0 投票
1 回答
90 浏览

c++ - 带有提升模板的 hana::make_map

我正在尝试在编译时创建键任务对的映射。键是一个序列号,它也应该用作映射任务类型内的模板参数。我学到的是,我需要将我的任务提升到一个元函数中才能完成这项工作,但是在创建hana::types与我的模板参数匹配的权限时我已经遇到了问题。

这是我到目前为止所拥有的:

Clang 抱怨:

错误:模板模板参数的模板参数与其对应的模板模板参数不同

我做错了什么,这是正确的方法吗?

最好的吴姆

0 投票
2 回答
993 浏览

c++ - 使用 boost::hana 创建一个大的编译时间映射

我正在尝试使用boost::hana创建一个constexpr非常大的查找表(最多 32768 个元素)。这是我的代码:

出于测试目的,每对的值为hana::int_c<0>。这被一些有意义的东西所取代。编译这个需要一些时间。有没有更快的方法来使用hana?

谢谢