在集合中提升hana查找类型
Boost hana find type in set
boost::hana
新手,尝试一个简单的实验,在一组类型中找到一个类型,然后只打印它的typeid.name
。然而,我得到了static_assert错误(注意:Xcode 7.2.1)
这是代码:
auto set = hana::make_set(hana::type_c<int>, hana::type_c<float>);
auto s = hana::adjust( set, hana::type_c<int>, [](auto x){ std::cout << typeid(x).name() << std::endl; });
错误为:
"hana::adjust(xs,value,f)要求'xs'为Functor");
然而,这似乎与adjust的文档不一致,后者指出xs
需要是一个结构。
任何建议都值得赞赏,因为我认为我在理解中遗漏了一些基本的东西。
问题是Hana使用函数式编程术语,其中Functor的含义与C++中通常使用的含义不同(即函数对象)。
在adjust
的签名中:
(auto&& xs, auto&& value, auto&& f)
调整:F(T)×U×(T→T)→F(T)
则xs
是F(T),是T上的Functor;f
是(T→T) ,一个函数对象,它将T的值映射到T。
这里的另一个问题是小写和大写的F指代签名中的不同对象。
Set不是Functor,因为它的不变量是值最多出现一次。如果用make_tuple
替换make_set
(并确保f
返回值),则代码将编译(示例):
auto t = hana::make_tuple(hana::type_c<int>, hana::type_c<float>);
hana::adjust(t, hana::type_c<int>, [](auto x){ std::cout << typeid(x).name() << std::endl; return x; });
但是,您可能不应该在这里使用hana::adjust
,因为您不关心返回值;相反,使用hana::filter
和hana::for_each
(示例):
auto s = hana::make_set(hana::type_c<int>, hana::type_c<float>);
hana::for_each(hana::filter(hana::to_tuple(s), hana::equal.to(hana::type_c<int>)),
[](auto x){ std::cout << typeid(x).name() << std::endl; });
相关文章:
- 正在查找文档以获得PS4平台的C++中的设备信息
- 在C++中查找文件
- 模板元程序查找相似的连续类型名称
- 在UNIX系统中使用DIR查找文件的字节大小
- 查找最接近的大于当前数字的数字的索引
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 查找后更改类变量
- 使用正则表达式regex_search在字符串中查找字符串
- 使用gcc从静态链接的文件中查找可选符号
- 在C++中查找范围的长度
- 算法问题:查找从堆栈中弹出的所有序列
- 在Windows中查找扬声器输出的当前音量级别
- 如何在C++中使用X509证书模在令牌中查找私钥
- 使用.find函数在c++中查找字符和另一个字符之间的大小
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 在 for 循环中查找问题时遇到困难
- 如何在文件中查找字节序列
- 试图创建一个多线程程序来查找0-100000000之间的总素数
- 使用堆查找第K个最大元素的时间复杂性
- 在集合中提升hana查找类型