问题标签 [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 回答
512 浏览

c++ - 使用 boost::hana 和 CMake 没有完整的 boost 安装(外部项目?)

我最近下载了最新的 boost 库以访问 boost::hana 并在他们的文档页面 上阅读他们建议使用“FindHana.cmake 模块将 Hana 设置为外部项目以供使用”。

我无法弄清楚这一点,所以我只是设置了编译标志以将我的 hana.hpp 包含到头文件路径中,但我很想知道如何按照文档中建议的方式完成此操作。

0 投票
1 回答
115 浏览

c++ - 从模板参数包创建一个hana::set

我正在努力弄清楚如何从模板参数包中制作 hana::set 。我有一个用于元组 (tuple_t) 的方法,但它似乎创建了一个我必须使用 make_set 的集合。这是我卡住的地方:

谢谢

0 投票
1 回答
889 浏览

c++ - 与 static_assert 和 boost::hana 相关的 Clang 编译错误

考虑以下在 Clang 3.8 上使用-std=c++14.

该测试非常荒谬,但这不是重点。现在考虑一个替代版本,其中测试直接放在static_assert

现在我得到一堆编译错误,说

i错误:对封闭 lambda 表达式中声明的局部变量的引用

问题:是什么导致第二个版本失败?

编辑:这可能是编译器错误吗?我发现在i之前访问时static_assert,一切都会再次编译:

更新:可以在 Clang 4.0 和当前开发分支 5.0 上重现相同的行为。

更新 2:正如@LouisDionne 所建议的,我将此作为错误提交:https ://bugs.llvm.org/show_bug.cgi?id=33318 。

0 投票
1 回答
123 浏览

c++ - 为什么 boost::hana::experimental::types 是实验性功能?类型列表有什么棘手的?

我正在研究Hana,我惊讶地发现它有一个概念type(一种“类型的容器”,类似于没有实际值的单元素元组),但类型(的序列type)是实验特征。

有谁知道为什么?与单一类型的容器相比,类型列表有什么复杂之处?

0 投票
1 回答
499 浏览

c++ - Boost Hana 迭代对元组

我有一个模板类,它接受一个类型对和一个整数常量的元组(某些类型可以重复,因此它不能是 hana::map)。我正在寻找迭代元组并调用toString()为每种类型定义的静态类型方法。我收到的错误是:

“错误:类型 'decltype(hana::first(c))' (又名 'boost::hana::type_impl::_ &')不能在 '::' 之前使用,因为它没有成员”

当它只是一个元组(使用decltype(c)::type::toString())时,我有一些非常相似的工作,但是一旦我将元组元素对与一个整数常数进行配对,我似乎无法提取该对的第一个元素的类型并执行相同的操作。

谢谢

0 投票
2 回答
2499 浏览

c++ - 如何从参数包中定义值类型的元组

我需要构建一个 n 类型的元组。这 n 个类型是 n 个其他类型的值类型。考虑这个片段:

这个应用程序的目的是这样的:我向这个类传递一个可能不同类型的容器的参数包。该类将这些容器放入一个元组sets中。该类还有一个字段combination,它是一个元组,其中包含与传递给该类的容器一样多的元素。但是元素的类型是不同容器的值类型。

然后,该类旨在懒惰地构建传递给它的容器的笛卡尔积,并将当前组合存储在combination. 但是我怎样才能真正以可变的方式获得容器的值类型呢?

0 投票
1 回答
354 浏览

c++ - hana 简单折叠“调用非 constexpr 函数”

我简化了产生错误的代码,发现即使是这个简单的计数函数也会给我一个错误(见下文):

错误(省略了一些看似无关的):

我在 g++ 6.3 中使用了 c++17。看起来它说 lambda 不被视为 constexpr,但在我看来它只使用常量值。任何人都可以向我建议如何使此代码正常工作吗?(它的目的是计算传递给折叠的元组中的元素数量)

0 投票
1 回答
192 浏览

c++ - Hana中满足谓词的元组元素的索引序列

是否有一种简洁的方法来获取满足Hana中谓词的元组元素的索引序列?

这是我仅使用标准库为此编写的代码:

使用示例:

的类型ints是现在std::index_sequence<1ul, 3ul>

0 投票
2 回答
329 浏览

c++ - 结构成员和 boost::hana::filter

在现代 c++ 中使用 constexpr 修饰符面临典型的新手问题。

我是对的,即使在 c++17 中也无法编写这样的代码(原因http://www.boost.org/doc/libs/1_63_0/libs/hana/doc/html/index.html#tutorial-附录-constexpr)?

并且必须使用“值作为类型”习语(在本例中为打开和关闭文件使用不同的类型)?

0 投票
1 回答
523 浏览

c++ - 将 `hana::string` 转换为 `constexpr const char (&)[]`

我有一些旧代码使用与此处此处str_const描述的非常相似的东西来执行一些 constexpr 字符串操作。是 Scott Schurr 描述的文字类型,可以从字符串文字构造,因为它有一个模板构造函数来自.str_constconst char (&)[]

我现在也有一些使用boost::hana.

我希望能够采用hana::string并创建str_const引用它的 a。最简单的方法是将 a 转换hana::string为 a constexpr const char (&)[]。(实际上,在这一点上这不是最简单的方法,最简单的方法肯定是在我的str_const实现中添加一个新的模板构造函数。但此时问题已经有了自己的生命,我主要感兴趣的是这是否可以用 . 来完成hana::string。所以让我们假设我不允许更改str_const实现。)

但是,在hana 文档中转换hana::string为运行时字符串的方法是hana::to<const char *>.

乐观地,我尝试了各种形式,hana::to<const char (&)[hana::length(...)]> (...)但这会导致静态断言hana失败。

文档建议的另一个选项hana是自己使用hana::unpack然后将字符粘贴到数组中。我写了这段代码

我认为这几乎可以工作,至少它可以编译。但是,如果在运行时也使用了引用,那么它会失败并出现链接器错误:undefined reference to ... string_keeper<boost::hana::string<(char)97> >::my_array.

(实际上我想我明白为什么这是一个 ODR 问题,如果我再想一想,我可能会记得如何解决它......不确定......)

直觉上,我觉得一定有办法做到这一点。因为,hana已经允许我转换hana::stringconstexpr const char *指针指向我想要的数组的位置。事实上,它甚至暗示可能存在一个邪恶的选择,我试图强制const char *(&)[]打字,尽管这似乎也需要做一些constexpr函数中不允许的事情。无论如何,如果hana可以制作该数组,那么我当然也可以,或者以某种方式说服它更准确地给我。

有没有办法修复我上面的代码?hana在我忽略的范围内有没有更简单的方法来做到这一点?由于某种原因,这实际上是不可能的吗?