问题标签 [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 和 CMake 没有完整的 boost 安装(外部项目?)
我最近下载了最新的 boost 库以访问 boost::hana 并在他们的文档页面 上阅读他们建议使用“FindHana.cmake 模块将 Hana 设置为外部项目以供使用”。
我无法弄清楚这一点,所以我只是设置了编译标志以将我的 hana.hpp 包含到头文件路径中,但我很想知道如何按照文档中建议的方式完成此操作。
c++ - 从模板参数包创建一个hana::set
我正在努力弄清楚如何从模板参数包中制作 hana::set 。我有一个用于元组 (tuple_t) 的方法,但它似乎创建了一个我必须使用 make_set 的集合。这是我卡住的地方:
谢谢
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 。
c++ - Boost Hana 迭代对元组
我有一个模板类,它接受一个类型对和一个整数常量的元组(某些类型可以重复,因此它不能是 hana::map)。我正在寻找迭代元组并调用toString()
为每种类型定义的静态类型方法。我收到的错误是:
“错误:类型 'decltype(hana::first(c))' (又名 'boost::hana::type_impl::_ &')不能在 '::' 之前使用,因为它没有成员”
当它只是一个元组(使用decltype(c)::type::toString()
)时,我有一些非常相似的工作,但是一旦我将元组元素对与一个整数常数进行配对,我似乎无法提取该对的第一个元素的类型并执行相同的操作。
谢谢
c++ - 如何从参数包中定义值类型的元组
我需要构建一个 n 类型的元组。这 n 个类型是 n 个其他类型的值类型。考虑这个片段:
这个应用程序的目的是这样的:我向这个类传递一个可能不同类型的容器的参数包。该类将这些容器放入一个元组sets
中。该类还有一个字段combination
,它是一个元组,其中包含与传递给该类的容器一样多的元素。但是元素的类型是不同容器的值类型。
然后,该类旨在懒惰地构建传递给它的容器的笛卡尔积,并将当前组合存储在combination
. 但是我怎样才能真正以可变的方式获得容器的值类型呢?
c++ - hana 简单折叠“调用非 constexpr 函数”
我简化了产生错误的代码,发现即使是这个简单的计数函数也会给我一个错误(见下文):
错误(省略了一些看似无关的):
我在 g++ 6.3 中使用了 c++17。看起来它说 lambda 不被视为 constexpr,但在我看来它只使用常量值。任何人都可以向我建议如何使此代码正常工作吗?(它的目的是计算传递给折叠的元组中的元素数量)
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)?
并且必须使用“值作为类型”习语(在本例中为打开和关闭文件使用不同的类型)?
c++ - 将 `hana::string` 转换为 `constexpr const char (&)[]`
我有一些旧代码使用与此处和此处str_const
描述的非常相似的东西来执行一些 constexpr 字符串操作。是 Scott Schurr 描述的文字类型,可以从字符串文字构造,因为它有一个模板构造函数来自.str_const
const 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::string
到constexpr const char *
指针指向我想要的数组的位置。事实上,它甚至暗示可能存在一个邪恶的选择,我试图强制const char *
回(&)[]
打字,尽管这似乎也需要做一些constexpr
函数中不允许的事情。无论如何,如果hana
可以制作该数组,那么我当然也可以,或者以某种方式说服它更准确地给我。
有没有办法修复我上面的代码?hana
在我忽略的范围内有没有更简单的方法来做到这一点?由于某种原因,这实际上是不可能的吗?